Big Endian 和 Little Endian
2014-04-16 11:41
197 查看
big endian是指低地址存放最高有效字节,而little
endian则是低地址存放最低有效字节
为什么要注意字节序的问题呢?你可能这么问。当然,如果你写的程序只在单机环境下面运行,并且不和别人的程序打交道,那么你完全可以忽略字节序的存在。但是,如果你的程序要跟别人的程序产生交互呢?在这里我想说说两种语言。C/C++语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的,而J***A编写的程序则唯一采用big
endian方式来存储数据。试想,如果你用C/C++语言在x86平台下编写的程序跟别人的J***A程序互通时会产生什么结果?就拿上面的0x12345678来说,你的程序传递给别人的一个数据,将指向0x12345678的指针传给了J***A程序,由于J***A采取big
endian方式存储数据,很自然的它会将你的数据翻译为0x78563412。什么?竟然变成另外一个数字了?是的,就是这种后果。因此,在你的C程序传给J***A程序之前有必要进行字节序的转换工作。
无独有偶,所有网络协议也都是采用big
endian的方式来传输数据的。所以有时我们也会把big
endian方式称之为网络字节序。当两台采用不同字节序的主机通信时,在发送数据之前都必须经过字节序的转换成为网络字节序后再进行传输。ANSI
C中提供了下面四个转换字节序的宏
endian则是低地址存放最低有效字节
为什么要注意字节序的问题呢?你可能这么问。当然,如果你写的程序只在单机环境下面运行,并且不和别人的程序打交道,那么你完全可以忽略字节序的存在。但是,如果你的程序要跟别人的程序产生交互呢?在这里我想说说两种语言。C/C++语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的,而J***A编写的程序则唯一采用big
endian方式来存储数据。试想,如果你用C/C++语言在x86平台下编写的程序跟别人的J***A程序互通时会产生什么结果?就拿上面的0x12345678来说,你的程序传递给别人的一个数据,将指向0x12345678的指针传给了J***A程序,由于J***A采取big
endian方式存储数据,很自然的它会将你的数据翻译为0x78563412。什么?竟然变成另外一个数字了?是的,就是这种后果。因此,在你的C程序传给J***A程序之前有必要进行字节序的转换工作。
无独有偶,所有网络协议也都是采用big
endian的方式来传输数据的。所以有时我们也会把big
endian方式称之为网络字节序。当两台采用不同字节序的主机通信时,在发送数据之前都必须经过字节序的转换成为网络字节序后再进行传输。ANSI
C中提供了下面四个转换字节序的宏
相关文章推荐
- 字节序 big endian 和 little endian
- 大端(Big Endian)与小端(Little Endian)详解
- Big Endian 和 Little Endian
- 彻底搞懂字符编码(unicode,mbcs,utf-8,utf-16,utf-32,big endian,little endian...)
- Big Endian 和 Little Endian
- 大端(Big Endian)与小端(Little Endian)详解
- 也谈大端模式(big endian)和小端模式(little endian) (二) 理论与实例一
- 大端(big endian)、小端(little endian)问题
- 大端模式Big Endian和小端模式Little Endian以及浮点数在内存中的存储
- 字节序:Big Endian 和 Little Endian
- 字符编码笔记:ASCII,Unicode和UTF-8,附带 Little endian和Big endian的解释
- Little Endian, Big Endian, 网络字节序
- 大端(Big Endian)和小端(Little Endian)的区别
- 关于Big Endian 和 Little Endian
- Big Endian 和 Little Endian
- little endian和big endian
- 写程序判断big endian little endian
- [J2SE]两种字节序:Big Endian和Little Endian
- 大端(Big Endian)与小端(Little Endian)详解
- 判断little endian和big endian