【发布时间】:2019-07-25 11:29:51
【问题描述】:
所以我有一小段代码需要 2 个 uint8_t,然后彼此相邻放置,然后返回一个 uint16_t。重点不是添加 2 个变量,而是将它们彼此相邻并从它们创建一个 uint16_t。 我希望它起作用的方式是,当第一个 uint8_t 为 0,第二个 uint8_t 为 1 时,我希望 uint16_t 也是一个。 但是,在我的代码中并非如此。 这是我的代码:
uint8_t *bytes = new uint8_t[2];
bytes[0] = 0;
bytes[1] = 1;
uint16_t out = *((uint16_t*)bytes);
应该是将字节的uint8_t指针变成uint16_t指针,然后取值。我希望该值为 1,因为 x86 是小端。但是它返回 256。 将第一个字节设置为 1,将第二个字节设置为 0 使其按预期工作。但我想知道为什么我需要切换字节才能使其工作。
谁能给我解释一下?
谢谢!
【问题讨论】:
-
您将此问题标记为“字节序”。那你到底有什么不明白的?因为字节序基本上就是答案。
-
"Little endian" 表示
0xABCD排列为0xCD, 0xAB。您是否混淆了这两种字节序? -
是的,我把他们弄糊涂了。以为小端序它以一点点结束。
-
是的,我讨厌这些名字。正是出于这个原因,我总是把它们混在我的脑海里。为什么“结束”意味着“第一个结束”是我无法理解的。试着记住大端是你在拉丁系统中写数字的方式(例如 12345)(即对于我们中的许多人来说,“正常”)然后从那里开始工作
标签: c++ endianness