由此可见,如果一个数以小尾顺序存储,经htonl函数调用后这个数的高地位字节会完全颠倒过来成为一个新的数。这个新的数在机器内部其实还是以小尾顺序存储的,但是相对于原来的数而言相当于是变成大尾顺序的了。 long型的0x40写完整为:0x 00 00 00 40,共四个字节,调用htonl后四个字节颠倒顺序,为0x 40 00 00 00。
详解C语言的htons和htonl函数、大尾端、小尾端 在Linux和Windows网络编程时需要用到htons和htonl函数,用来将主机字节顺序转换为网络字节顺序。 在Intel机器下,执行以下程序 int main() { printf("%d /n",htons(16)); return 0; } 得到的结果是4096,初一看感觉很怪。 解释如下,数字16的16进制表示为0x0010,数...
C-使用htonl和ntohl对结构进行编组/解组是一种网络编程中常用的技术,用于在不同字节序的机器之间进行数据传输和通信。 htonl(host to network long)和ntohl(network to host long)是两个函数,用于将32位整数在主机字节序和网络字节序之间进行转换。主机字节序是指当前计算机体系结构所使用的字节序,而网络字节序是一...
C语言htonl()函数:将32位主机字符顺序转换成网络字符顺序 相关函数:htons, ntohl, ntohs 头文件:#include <netinet/in.h> 定义函数:unsigned long int htonl(unsigned long int hostlong); 函数说明:htonl ()用来将参数指定的32位hostlong转换成网络字符顺序. 返回值:返回对应的网络字符顺序. 范例:参考getservbyp...
After htonl() x in hex: 0x80a31201 x by bytes: 1 12 a3 80 0 0 0 0 /// const int i = 1; #define is_bigendian() ( (∗(char∗)&i) == 0 ) int reverseInt (int i) { unsigned char c1, c2, c3, c4; ///移位法+ 掩码(遮罩)+ ...
使用TCP/IP协议进行网络应用开发的朋友首先要面对的就是对IP地址信息的处理。IP地址其实有三种不同的表示...
htonl 把unsignedlong类型从主机序转换到网络序; ntohs 把unsignedshort类型从网络序转换到主机序; ntohl 把unsignedlong类型从网络序转换到主机序; 这四个函数的函数声明为: uint32_thtonl(uint32_thostlong);uint16_thtons(uint16_thostshort);uint32_tntohl(uint32_tnetlong);uint16_tntohs(uint16_tnetsho...
val_ret.val_1.high = htonl( val_arg.val_1.low );return val_ret.val_2;} 只要把内存结构的草图画出来就比较容易明白了。(3).为了理解c++类的布局,再看下面一个例子。有如下类:class Test { public :float getFVal(){ return f;} private :int i;char c;float f;};Te...
通信时的这种常用的操作,Socket API这一层,一般都提供了封装好的转换函数,方便程序员使用。比如从主机字节序到网络字节序的转换函数:htons、htonl(C语言中常用),从网络字节序到主机字节序的转换函数:ntohs、ntohl(C语言中常用)。当然,明白了原理后也可以编写自己的转换函数。
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); // 端口复用 int opt = 1; ret = setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt, sizeof(opt)); if (ret == -1) { error_die("setsockopt"); } if (bind(server_socket, (struct sockaddr*)&server_addr, size...