测试网络字节序与主机序

#include <stdlib.h>

#include <errno.h>

#include <string.h> // memset zero

#include <sys/types.h>

#include <sys/socket.h> // AF_INET

#include <arpa/inet.h> // inet_* 的头文件

#include <netinet/in.h> // struct sockaddr_in

int main(int argc, char** argv)

{

  char szIP[] = "192.168.1.100";

  struct sockaddr_in addr;

  memset(&addr, 0, sizeof(addr));

  iint ret = inet_pton(AF_INET, szIP, addr.sin_addr); // 网络序输出

  printf("ret = %d\n", ret);

  printf("sin_addr: %2X\n", addr.sin_addr); //

  printf("s_addr: %2X\n", addr.sin_addr.s_addr);

  unsigned long lip = 0xac100ac4; // 主机序

  printf("lip: %2X\n", lip);

  lip = htonl(lip);

  printf("htonl lip: %2X", lip);

  char strTemp[16];

  ret = inet_ntop(AF_INET, &lip, strTemp, __SOCK_SIZE__); // 网络序输入,字符串输出

  printf("ret = %d\n", ret);

  printf("%s\n", strTemp);

  in_addr myin;

  ret = inet_aton(strTemp, &myin);

  printf("inet_aton: %2X", myin.s_addr); // 网络序输出

  printf("inet_ntoa: %s\n", inet_ntoa(mysin)); // 网络序输入

  getchar();

  return 0;

}

时间: 2024-08-28 08:51:06

测试网络字节序与主机序的相关文章

网络序,主机序学习

网络序,主机序学习 网络序,主机序总是迷迷糊糊的.需要整理一下.千言万语,不如代码来的实在.哈哈,说干就干. #include <stdio.h> #include <stdlib.h> #include <arpa/inet.h> int host_order() { unsigned long a = 0x12345678; unsigned char * p = (unsigned char *)(&a); printf("主机字节序:%0x %

[C++][转]CPU字节序 网络序 主机序 大端小端

原帖:http://www.cnblogs.com/darktime/p/3298075.html 不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序最常见的有两种1. Little endian:将低序字节存储在起始地址2. Big endian:将高序字节存储在起始地址 LE little-endian最符合人的思维的字节序地址低位存储值的低位地址高位存储值的高位怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说低位值小,就应该放在内存地址小的地方,也

大端、小端与网络字节序

大端(Big-Endian),小端(Little-Endian)以及网络字节序的概念在编程中经常会遇到,网络字节序(Network Byte Order)一般是指大端(Big-Endian,对大部分网络传输协议而言)传输,大端小端的概念是面向多字节数据类型的存储方式定义的,小端就是低位在前(低位字节存在内存低地址,字节高低顺序和内存高低地址顺序相同),大端就是高位在前,(其中"前"是指靠近内存低地址,存储在硬盘上就是先写那个字节).概念上字节序也叫主机序. 一.大小端概念 1.首先大小

主机字节序 和 网络字节序

不同的CPU有不同的字节序类型,这些字节序是指 整数 在内存中保存的顺序,这个叫做 主机序. 最常见的有两种: 1.Little endian:将低序字节存储在起始地址 2.Big endian:将高序字节存储在起始地址 LE little-endian(小端) 最符合人的思维的字节序: 地址低位存储值的低位: 地址高位存储值的高位: 怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说: 低位值小,就应该放在内存地址小的地方,也即内存地址低位: 反之,高位值就应该放在内存地址大的地方,也即

python通过ntohl和htonl等函数实现主机字节序和网络字节序相互转换

Python的socket库提供了将数据在网络字节序和主机字节序之间相互转换的函数.有什么作用呢? 在编写低层网络应用时,或许需要处理通过电缆在两台设备之间传送的低层数据.在这种操作中,需要把主机操作系统发出的数据转换成网络格式,或者做逆向转换,因为这两种数据的表示方式不一样. 技术点解析: 1.定义convert_integer()函数,注意函数格式(以后都会提醒这个,要养成习惯) 2.socket库中的类函数 ntohl() 把网络字节序转换成了长整形主机字节序 htonl() 把长整形主机

c# 主机和网络字节序的转换 关于网络字节序和主机字节序的转换

最近使用C#进行网络开发,需要处理ISO8583报文,由于其中有些域是数值型的,于是在传输的时候涉及到了字节序的转换. 字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有两种字节顺序,根据他们所处的位置我们分别称为主机节序和网络字节序. 通常我们认为网络字节序为标准顺序,封包的时候,将主机字节序转换为网络字节序,拆包的时候要将网络字节序转换为主机字节序. 原以为还要自己写函数,其实网络库已经提供了. 主机到网络:short/int/long IPAddress.HostToNet

第五篇:主机字节序与网络字节序的转换

前言 我们知道,数据在主机内的存放有两种模式,也就是说,主机字节序有两种:大端和小端( 这里假定读者已经清楚这个问题 ).但在网络通信中,要求通信数据( 通信数据这里指IP号和端口号 )的使用必须用网络字节序.什么又是网络字节序? 网络字节序可以理解为主机字节序的大端模式.如果你的主机字节序原本就是大端模式,那么你可以考虑不用将通信数据转换为网络字节序:但如果你的主机字节序是小端,那么通信数据必须被下面提及到的其中某个函数进行处理,转换成网络字节序后方可使用( 即存放进套接字地址结构变量 ).

网络字节序与主机字节序

最近在项目开发过程中,需要在采用JAVA作为语言的服务器与采用C++作为语言的服务器间进行通信,这就涉及到这两种语言间数据类型的转换以及网络字节序与主机字节序的区别.该文主要说说网络字节序和主机字节序的区别以及Little endian与Big endian的概念.其实编程的事就比较简单了   我也懒得写了,直接引用了我觉得写的挺好的两篇文章: 什么是Big Endian和Little Endian? 来源:http://blog.ednchina.com/qinyonglyz/194674/m

主机字节序 与 网络字节序

一.字节顺序 是指占用内存多于一个字节类型的数据在内存中的存放顺序. java中一个int型数据占用4个字节,假如有一个16进制的int数,int value = 0x01020304 小端字节序(little endian):低字节数据存放在内存低地址 大端字节序(bigendian): 低字节数据存放在高地址处 主机字节序跟CPU有关的,IA架构(Intel.AMD)的CPU中是Little-Endian,而PowerPC .SPARC和Motorola处理器是Big-Endian. 网络字