DSP

大小端存储模式的几个问题

2019-07-13 18:11发布

1. 为什么大小端能够并存至今?

答:
  • 历史惯性
  • 各有优势

大端优点:符号位在所表示的数据的内容的第一个字节中,便于快速判断数据的正负和大小。
这里写图片描述 小端优点:
  • 低地址放低字节,所以在强制转换时不需要调整字节的内容。
  • CPU做数值运算时从内存中依次从低到高取数据进行运算直到最后刷新最高位的符号位,这样运算方式会更高效。
  • 这里写图片描述

2. 发展现状

Interl x86系列芯片使用小端存储模式,
ARM的芯片默认小端,但可以切换到大端;
网络上普遍采用大端模式,使用大端的CPU: power pc 、DSP … … 大小端是由CPU架构决定的, 不是软件决定!!!

3. 为什么 网络序 是 大端序 ?

“网络协议规定接收到的第一个字节是高字节存放低地址”
或者说
TCP/IP协议规定把接收到的第一个字节当做高位看待,这就要求发送端发送的第一个字节是高字节。

4. 大小端转换(32位)

((uint32)(A)&0xff000000) >> 24 |(uint32)(A)&0x00ff0000) >> 8 |(uint32)(A)&0x0000ff00) << 8 |(uint32)(A)&0x000000ff) << 24)

5. 判断大小端模式程序

bool IsLittle() { int x=1; return *(char*)&x == 1; } bool IsLittle() { union check { int i; char ch; }c; c.i = 1; return (c.ch == 1); }