【发布时间】:2019-03-13 04:15:19
【问题描述】:
char S[6] = "18243";
以下字符串在大端和小端系统中如何表示?
【问题讨论】:
-
Endianness 与数组无关,数组总是按相同的顺序存储(第一个元素在前,最后一个元素在后,地址递增)。
标签: c memory endianness cpu-architecture
char S[6] = "18243";
以下字符串在大端和小端系统中如何表示?
【问题讨论】:
标签: c memory endianness cpu-architecture
char 类型包含一个字节。因此,该类型不涉及字节序。
在您的示例中,您有一个数组。数组元素一个接一个地存储在内存中。所以S[0]先出现,然后S[1]等:
-----------------------------------
S | '1' | '8' | '2' | '4' | '3' | 0 |
-----------------------------------
【讨论】:
char 大于 8 位时是否仍然没有字节序?
char 在具有字可寻址内存的 DSP 上可以是 32 位,通常称为 4 字节,不称为大字节。无法单独访问每个字的字节(使用 DMA 或使用 MMIO 加载/存储除外),因此 char 中的字节顺序除了外部硬件之外仍然没有意义。 (ping @FiddlingBits,这与您的问题有关。)
char 类型的不同位宽,但它仍然是任何目标平台上最小的可寻址单元,因此单个 char 不存在字节顺序问题。
字节序仅适用于数字(大于一个字节)。
无论字节顺序如何,字符串都以相同的方式表示:最低有效地址的第一个字母。
【讨论】:
假设 compiler/linker/loader 决定将 S 放在地址 0x420000。
0x420000 '1'
0x420001 '8'
0x420002 '2'
0x420003 '4'
0x420004 '3'
0x420005 '\0'
【讨论】:
'\0' 或 0 是绝对相等的,所以选择无关紧要