首页 > 解决方案 > 将指针 uint8 隐藏到指针 uint 16?

问题描述

int main
{
     uint8_t a[3] ={0x4,0x3,0x1};
     uint16_t b= *((uint16_t *) a);
     cout << (int)b;
}

结果:772 那么这个数字 772 是什么?谢谢!

标签: c++

解决方案


你需要谷歌一下数组是如何存储在内存中的。当你声明

uint8_t a[3] = {0x4,0x3,0x1};

您创建一个占用 3 个字节并包含 3 个元素的内存块(不考虑填充,这是另一个主题)。

因此对于

uint8_t a[3] = {0x4,0x3,0x1};

你进入记忆

Byte1: 0x4
Byte2: 0x3
Byte3: 0x1

而在访问 16 位变量时,编译器需要 3 个元素,每个元素为 2 个字节,总共占用 6 个字节。因此对于

uint16_t a[3] = {0x4,0x3,0x1};

你进入记忆

Byte1+2: 0x4, 0x0
Byte3+4: 0x3, 0x0
Byte5+6: 0x1, 0x0

在您的情况下,当您将 uint8_t 数组转换为 uint16_t 时,您将 0x4 和 0x3 合并为 0x304,如您所知,772 ...

希望这可以帮助


推荐阅读