关于htonl()】的更多相关文章

1.htonl ()和ntohl( ) u_long PASCAL FAR ntohl (u_long netlong); u_short PASCAL FAR ntohs (u_short netshort); ntohl( )-----网络顺序转换成主机顺序 u_long PASCAL FAR htonl (u_long hostlong); u_short PASCAL FAR htons (u_short hostshort); htonl ()-----主机顺序转换成网络顺序 2.in…
在Linux和Windows网络编程时需要用到htons和htonl函数,用来将主机字节顺序转换为网络字节顺序. 在Intel机器下,执行以下程序 int main(){   printf("%d /n",htons(16));       return 0;} 得到的结果是4096,初一看感觉很怪. 解释如下,数字16的16进制表示为0x0010,数字4096的16进制表示为0x1000. 由于Intel机器是小尾端,存储数字16时实际顺序为1000,存储4096时实际顺序为0010…
因为需要直接处理一个网络字节序的 32 位 int,所以,考虑用自己写的还是系统函数效率更高.然后又了下面的了解. 首先是系统函数 htonl ,我在 kernel 源码 netinet/in.h 找到如下定义: # if __BYTE_ORDER == __BIG_ENDIAN /* The host byte order is the same as network byte order, so these functions are all just identity. */ # defi…
htons的功能:将一个无符号短整型数值转换为网络字节序,即大端模式(big-endian) 参数u_short hostshort: 16位无符号整数 返回值:TCP / IP网络字节顺序. htonl: 将主机的无符号长整形数转换成网络字节顺序.…
因为自己在系统内核写网络程序有时候需要调用htons htonl 这样的函数进行转换,但由于内核只能调用c运行库,别的API不能调用.自己也接触过一点汇编,从来没有去学过.看过老码识途这本书前几章,如是自己反编译试了一下,结果自己还真反出来,对于懂汇编的人确实非常容易. ULONG myHtonl(ULONG i) { ULONG eax,edx,ecx; eax = i; edx = i; edx = edx << 16; eax = eax & 0x0ff00; eax = eax…
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题. 这时就可能用到htons(), ntohl(), ntohs(),htons()这4个网络字节顺序与本地字节顺序之间的转换函数: htonl()--"Host to Network Long int"     32Bytes      ntohl()--"Network to Host Long int"     32Bytes      htons()--"Host to Netw…
ntohs =net to host short int 16位htons=host to net short int 16位ntohl =net to host long int 32位htonl=host to net long int 32位 网络字节顺序NBO(Network Byte Order) 按从高到低的顺序存储,在网络上使用同一的网络字节顺序,可避免兼容性问题: 主机字节顺序HBO(Host Byte Order) 不同的机器HBO不相同,与CPU的设计有关,数据的顺序是由CP…
名词解析: 主机字节序: 不同的CPU有不同的字节序类型,这些字节序是指整数在内存中保存的顺序,这个叫做主机序.最常见的有两种 1.Little endian:低字节存高地址,高字节存低地址 2.Big endian:低字节存低地址,高字节存高地址 网络字节序: 网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型.操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释.网络字节顺序采用big endian排序方式. 为了进行转换bsd socket提供了转换的…
ntohs =net to host short int 16位 htons=host to net short int 16位 ntohs =net to host long int 32位 htonl=host to net   long int   32位 简述:    将一个无符号短整形数从网络字节顺序转换为主机字节顺序. #include u_short PASCAL FAR ntohs( u_short netshort); netshort:一个以网络字节顺序表达的16位数. 注释…
判断字节序大小端code #include <stdio.h> int main() { ) == ) printf("big endian\n"); else printf("little endian\n"); ; } int main() { printf("0x%x\n", htons(0x9225)); printf("0x%x\n", htonl(0x9225)); } 上述code输出数值为: $ .…