从值小于256的uint16到uint8的Endian安全转换



我正在与返回uint16_t值的API交互;在这种情况下,我知道这个值永远不会超过255。我需要将该值转换为uint8_t,以便与单独的API一起使用。我目前正在以以下方式进行此操作:

uint16_t u16_value = 100;
uint8_t u8_value = u16_value << 8;

如果从小端序(我当前的系统(转移到大端序系统,这个解决方案目前会暴露出端序问题。

缓解这种情况的最佳方法是什么?

来自cppreference

对于无符号和正a,a << b的值是a * 2**b的值,即返回类型的模最大值加1(即,执行逐位左移,并丢弃从目标类型移出的位(。

这里没有任何关于endianness的内容。你可以直接做

uint16_t u16_value = 100;
uint8_t u8_value = u16_value;

uint16_t u16_value = 100;
uint8_t u8_value = static_cast<uint8_t>(u16_value);

要明确。

最新更新