c++ - 将指针 uint8 隐藏到指针 uint 16?
问题描述
int main
{
uint8_t a[3] ={0x4,0x3,0x1};
uint16_t b= *((uint16_t *) a);
cout << (int)b;
}
结果:772 那么这个数字 772 是什么?谢谢!
解决方案
你需要谷歌一下数组是如何存储在内存中的。当你声明
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 ...
希望这可以帮助
推荐阅读
- java - 调用 Lambda 函数时出现 ClassNotFoundException
- css - CSS:使元素的z-index低于兄弟的孩子
- python - python的算法列表
- c - C 编译指示“-Wunused-variable”在 Ubuntu 上不起作用
- javascript - 从 Javascript 中的 XML 数据中获取任何属性的值
- java - 使用 Swing 的测验布局
- python - 将预定时间戳传递给 celery beat / redbeat
- selenium - bind() 失败:无法分配请求的地址 (99)
- brightness - Halcon - 检测与当地环境相比的亮点
- sphinx - Thinking Sphinx(v4.4) - 在索引定义中包含“where”条件后索引时出错