需要注意字节序的大端(big endian)和小端(little endian)的几种情景
程序员文章站
2024-03-08 12:48:34
...
大端(big endian):在内存中,按照从最低有效字节到最高有效字节的顺序存储对象,即数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中。
小端(little endian):在内存中,按照从最高有效字节到最低有效字节的顺序存储对象,即数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。
下图举例摘自CSAPP:
大多数Intel兼容机都用小端模式,IBM和Oracle的大多数机器使用大端模式。有些比较新的微处理器是双端法(bi-endian),即可以把它们配置成大端或小端的机器运行。但是,实际上,一旦选择了特定的操作系统,那么字节序也就固定下来了。对多数应用程序员来说,字节序是透明的,不需要关心,但是,在以下几种情景中,需要注意了:
1、在不同类型的机器之间通过网络传送二进制数据时,网络应用程序的编写必须遵守已建立的字节序规则,发送方将它的内部表示转换成网络标准,而接收方则将网络标准转换为它的内部表示;
2、在检查机器级程序时,阅读表示整数数据的字节系列时字节顺序很重要;
3、对于有些系统级编程来说,有时需要编写规避正常的类型的程序,比如C中的强制类型转换(cast)或联合(union)。
下面给出一个例子检测当前机器是大端存储还是小端存储:
BOOL IsLittleEndianMode()
{
union _DATA
{
int Para1;
char Para2;
} data;
data.Para1 = 1;
BOOL RetVal = FALSE;
if ( data.Para2 == 1 )
{
RetVal = TRUE;
}
return RetVal;
}
下一篇: C# 调用存储过程简单完整的实例代码