我有以下数据
uint16_t a[1] = { 0x2321 };
我想将uint8_t转换为:
uint8_t b[1] = { 0x21 };
如何在C程序中执行此操作?
答案 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)警告。