【发布时间】:2018-08-09 14:46:32
【问题描述】:
我听说在 x86 处理器中,字节以 little-endian 字节顺序存储在内存中。
意味着首先存储最低有效字节。
我无法理解这个想法及其与字节如何存储在 RAM 中的关系。
例如,
#include <stdio.h>
char string[6];
scanf("%5s",string);
在上面的代码中,如果我输入“Hello”这个词,“o”首先被存储(?)
据我了解,在 C 语言中(以及在一般编程中?)当您声明一个变量时,该变量会存储在 RAM 的 Stack 部分中。所以“Hello”这个词会像这样存储在堆栈中:
o <Lower memory addresses>
l
l
e
H <Higher memory addresses>
堆栈从较高的内存地址向较低的地址增长,处理器从堆栈顶部的第一个字节开始读取字节(较低的内存地址)。
现在如果我打印字符串的值,我应该会看到“olleH”。
但显然它会打印“Hello”。
这是因为小端字节序吗?
【问题讨论】:
-
你在这里处理的是 bytes,所以字节序在这里不会改变任何东西。
-
字符串没有字节序。
-
字符串也不会向后复制
-
(旁注:您不需要标题中的
(in C),用c 自动标记您的问题) -
只需查找“endian”。我相信维基百科有很好的描述。
标签: c memory char stack endianness