计算机网络笔记:字节序与比特序

本文介绍了字节序的两种类型——小端字节序和大端字节序,并通过实例解释了它们的内存存储方式。同时,探讨了比特序,虽然在字节层面无从得知,但在可寻址比特的情况下,其顺序与字节序一致。网络中通常采用大端字节序进行数据传输,而在字节内部则按小端方式传送比特。最后,提供了查看字节序和比特序的代码参考链接。

1、字节序

所谓字节序是指多字节数据在内存中的存储顺序,通常有两种:小端字节序、大端字节序;

小端字节序:低位字节存放在低位地址,高位字节存放在高位地址;

大端字节序:高位字节存放在低位地址,低位字节存放在高位地址;

例如:十六进制数0x12345678,在两种字节序下的内存存放方式为:

内存地址0123
小端字节序78563412
大端字节序12345678
一般具有小端字节序的系统为小端系统,具有大端字节序的系统为大端系统。


2、比特序

比特序是指一个字节中的比特在内存中的存放顺序。一般计算机能寻址的最小单元为字节,字节中比特的顺序无从得知,但是事实上比特序跟字节序是一致的。假设计算机能够寻址每个比特,那么:

小端字节序下:低位比特存放在低地址,高位比特存放在高地址;

大端字节序下:高位比特存放在低地址,低位比特存放在高地址;

例如:以上述十六进制数0x12345678的低位字节0x78为例,在两种内存中的存放方式为:

内存地址(每个地址指向一个bit)01234567
小端字节序00011110
大端字节序01111000

3、数据在网络中的传送顺序

一般而言,网络字节序是大端字节序,即在网络中传送的数据都是按照大端方式传送的,先传送高位字节,再传送低位字节;在传送一个字节时,总是按照小端方式传送,先传送一个字节的低位bit,再传送一个字节的高位bit。


4、补充一下查看字节序和比特序的代码,参考http://blog.youkuaiyun.com/liuxingen/article/details/45420455/#reply

#include <stdio.h>

int main()
{
	/*查看字节序*/
	union byte_order
	{
		unsigned short a;
		unsigned char  b[2];
	}u_byte_order;
	u_byte_order.a=0x1234;
	printf("low address 0X%x byte: 0X%x\n", (unsigned int)&u_byte_order.b[0], u_byte_order.b[0]);
	printf("high address 0X%x byte: 0X%x\n", (unsigned int)&u_byte_order.b[1], u_byte_order.b[1]);

	/*查看比特序*/
	struct bit_order
	{
		unsigned char a:2,
					  b:3,
					  c:3;
	};
	unsigned char ch = 0x66; //binary:101 | 010 | 10
					 //c  |  b  | a
	struct bit_order *pbit_order = (struct bit_order *)&ch;
	printf("low 2 bit %u\n", (unsigned int)pbit_order->a);
	printf("mid 3 bit %u\n", (unsigned int)pbit_order->b);
	printf("high 3 bit %u\n", (unsigned int)pbit_order->c);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值