周梦康 发表于 2015-10-18 2808 次浏览 标签 : Linux

字节序是处理器架构特性,用于指示像整数这样的大数据类型内部的字节如何排序。

图可以参考这篇文章 http://www.blogjava.net/tinysun/archive/2009/12/31/307952.html 画得挺清晰的。

自己写一个程序验证下:

#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>

int main()
{
	unsigned int data = 0x12345678;
	char *p = &data;	

	printf("%x %x %x %x\n", p[0],p[1],p[2],p[3]); // 78 56 34 12

	if (p[0] == 0x78)
	{
		printf("当前系统为小段模式\n");
	}
	else
	{
		printf("当前系统为小段模式\n");
	}
	//x86平台都是小端模式

	uint32_t net_data = htonl(data);

	p = &net_data;

	printf("%x %x %x %x\n", p[0],p[1],p[2],p[3]); // 12 34 56 78
	// 网络字节序为大端模式

	return 0;
}

小端模式更易于理解,大端模式看来更加直观。

我就这么记:看来和原来数字排序一样的就是大端模式。

为什么要记录这个笔记呢,因为我们在进行网络编程时,传输的标准是网络字节序,网络字节序是大端字节序,而各个主机的字节序不一定一致,所以如果服务器是小端字节序,那么需要在发送数据之前对数据进行转换。

评论列表