【发布时间】:2021-08-08 09:20:22
【问题描述】:
我有一个需要两个参数的子例程:uint8_t[] 数组缓冲区和 uint16_t 大小:void getData(uint8_t * pData, uint16_t size)
我想将指针传递给 uint16_t 变量,而不是 2 字节数组指针,这样我以后不必将数组内容转换为 uint16_t 变量。这是我尝试过的:
uint16_t value;
uint8_t values[2];
// instead of:
getData(values, 2);
value = (values[0] << 8) | values[1];
// I want to simply call:
getData((uint8_t *)&value, 2);
上述方法不会产生预期的结果。正确的方法是什么?
请指教。
【问题讨论】:
-
结果将取决于您机器的字节序。你写的内容对应于大端,但你很可能在小端架构上。
-
现在大多数 CPU 都是 little-endian(这意味着最低有效字节在前)。您对
value的计算会交换字节。 -
你能解释一下你想要的代码有什么问题吗?它看起来比你说你想要的可怕演员阵容好多。
-
一如既往,如果您向我们提供输入和预期的输出/结果,将会有所帮助。
-
另外,如果您不遵循 eerorika 的建议,请使用 htons/ntohs 函数(here Windows 文档)。
标签: c