int main
{
uint8_t a[3] ={0x4,0x3,0x1};
uint16_t b= *((uint16_t *) a);
cout << (int)b;
}结果:772那么772这个数字是什么?谢谢!
发布于 2019-10-30 15:42:04
你需要搜索一下数组是如何存储在内存中的。当你声明
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,如您所知,0x304是772...
希望这能有所帮助
https://stackoverflow.com/questions/58620111
复制相似问题