在 C 语言中,字节序概念让我有些担心。假设我在小端机器上声明一个整数(2 字节),如下:
int a = 1;
并且它被存储为:
Address value
1000 1
1001 0
在大端模式下,它应该是反过来存储的。现在,如果我执行 &a,那么在两台机器上都应该得到1000。
如果这是正确的,那么如果我存储 int a=1
,那么在小端模式下我应该得到a=1,在大端模式下应该得到2^15。这个正确吗?
在 C 语言中,字节序概念让我有些担心。假设我在小端机器上声明一个整数(2 字节),如下:
int a = 1;
并且它被存储为:
Address value
1000 1
1001 0
在大端模式下,它应该是反过来存储的。现在,如果我执行 &a,那么在两台机器上都应该得到1000。
如果这是正确的,那么如果我存储 int a=1
,那么在小端模式下我应该得到a=1,在大端模式下应该得到2^15。这个正确吗?
hton
和ntoh
函数将本地字节序转换为网络字节序和网络字节序转换为本地字节序,以避免出现问题。在小端和大端模式中,都会返回“第一个”字节的地址。这里所说的“第一个”指的是你示例中的1000,并非最高有效字节或最低有效字节的“第一个”。
&a
,那么在小端模式下应该得到1000,在大端模式下应该得到1001。
不是这样的;在两台机器上都会得到地址1000。这是正确的,但不仅限于C语言,任何读写二进制数据的程序都会遇到这个问题。如果数据只在一台计算机上保留,则不会有问题。
此外,如果您从文本文件中读取/写入数据,则不会出现此问题。
_mm_set_ps
中,英特尔选择将参数按照大多数“正常思考”的人所期望的方式进行排序。 - Damon