大小端、网络字节序、LSB,MSB的事

本文介绍了计算机内存中的大小端问题,解释了Big-Endian和Little-Endian的区别,并详细说明了网络字节序在TCP/IP协议中的大端规则。此外,还探讨了LSB(最低有效位)和MSB(最高有效位)的概念,特别是在多比特信号排序中的应用。

1.大小端的概念
大小端的问题主要是由计算机内存中多字节形数据类型的存在而引起的,他的研究单位是字节,对于char行数据类型,就是一个字节,八位,是不存在大小端问题的;但是对于short、int、float等数据类型,表示一个数据需要多个字节,那么这多个字节之间的顺序就十分重要了。

Big-Endian和Little-Endian的定义如下:

  1. Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。

  2. Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

1)大端模式:
低地址 -----------------> 高地址

0x12 | 0x34 | 0x56 | 0x78

2)小端模式:
低地址 ------------------> 高地址

0x78 | 0x56 | 0x34 | 0x12

在这里插入图片描述
注意上面的程序中数组是char型的,数据0x123456是int型,占四个字节,所以指针才能逐字节访问。

2.网络字节序
网络上传输的数据都是字节流,对于一个多字节数值,在进行网络传输的时候,先传递哪个字节?也就是说,当接收端收到第一个字节的时候,它将这个字节作为高位字节还是低位字节处理,是一个比较有意义的问题;
  UDP/TCP/IP协议规定:把接收到的第一个字节当作高位字节看待,这就要求发送端发送的第一个字节是高位字节;而在发送端发送数据时,发送的第一个字节是该数值在内存中的起始地址处对应的那个字节,也就是说,该数值在内存中的起始地址处对应的那个字节就是要发送的第一个高位字节(即:高位字节存放在低地址处);由此可见,多字节数值在发送之前,在内存中因该是以大端法存

### LSBMSB 的概念 在编程和数字系统中,LSB(Least Significant Bit)表示最低有效位,而 MSB(Most Significant Bit)则代表最高有效位。这些术语通常用于描述二进制数中的各个比特的重要性。 #### 最低有效位(LSB) 最低有效位是指在一个二进制数中最右侧的位,它决定了数值中小幅度的变化。对于一个 n 位的二进制数来说,LSB 是权重最小的一位,在整型数据类型的存储过程中起到重要作用[^1]。例如: ```python number = 0b0010 # Binary representation of decimal 2 lsb_value = number & 0b0001 # Extracting the LSB value print(lsb_value) # Output will be 0 since LSB is not set here. ``` 在这个例子中,`&` 运算符被用来提取给定数字的最低有效位。 #### 最高有效位(MSB) 相对地,最高有效位位于二进制数最左侧的位置,其变化会对整个数值造成最大的影响。当涉及到有符号整数或者浮点数编码时,MSB 可能还承担着其他功能,比如作为符号位来区分正负数[^3]。下面展示如何获取某个字节变量的 MSB: ```c unsigned char get_msb(unsigned char byte){ return (byte >> 7) & 1; } int main(){ unsigned char data = 0b10000000; // Example with MSB set printf("%d\n",get_msb(data)); // Should print '1' return 0; } ``` 这里通过右移操作将目标位移动到位置零处再与其他掩码相与得到最终结果。 ### 应用场景举例 - **SPI通信协议**:正如之前提到过的内容那样,在串行外设接口(SPI)里边会涉及到了关于主从设备间的数据传输顺序问题——即先发送的是哪个部分?如果约定好采用MSB First的方式,则意味着每次都是把当前处理单元里的最大权值那一位最先传出去;反之亦然如果是LSB first的话就会相反过来[^1]。 - **图像处理领域**:有时为了压缩图片文件大小可能会运用到一种叫做抖动的技术(dithering),其中就包含了利用像素颜色分量各自的高低有效位来进行近似计算从而减少所需储存空间的同时保持视觉效果接近原图质量的方法之一[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值