关于C#:如何将uint16_t值分配给uint8_t数组?


How to assign uint16_t value into uint8_t array?

我有以下数据

1
uint16_t a[1] = { 0x2321 };

我想转换为uint8_t为:

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

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


强制转换低位字节:

1
2
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);


只是

1
b[0] = a[0];

或函数内部的声明中(在文件范围内,这是非法的):

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

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

您不需要任何强制转换或位掩码操作,但是如果您不编写强制转换来抑制此警告,则某些编译器可能会发出有关精度损失的虚假(IMHO)警告。