如何将uint16_t值分配给uint8_t数组?

时间:2014-01-23 10:01:51

标签: c

我有以下数据

uint16_t a[1] = { 0x2321 };

我想将uint8_t转换为:

uint8_t b[1] = { 0x21 };

如何在C程序中执行此操作?

3 个答案:

答案 0 :(得分:6)

投下低位字节:

uint16_t a[1] = {0x2321};
uint8_t b[1] = {(uint8_t)(a[0] & 0xFF)};

答案 1 :(得分:2)

使用位掩码获取最低有效字节:

uint8_t b[1];
b[0] = (a[0] & 0xff);

答案 2 :(得分:1)

只是

b[0] = a[0];

或在函数内部的声明中(这在文件范围内不合法):

uint8_t b[1] = { a[0] };

有一个明确定义的隐式转换,从无符号整数类型到较小的无符号整数类型;该值以模数减少(1 +较小类型的最大值)。

您不需要任何强制转换或位掩码操作,但如果您不编写强制转换来抑制此警告,某些编译器可能会给出一个关于精度损失的似是而非的(IMHO)警告。