从值小于256的uint16到uint8的字节序安全转换

时间:2018-10-30 17:12:03

标签: c++

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

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

如果从小字节序(我当前的系统)迁移到大字节序系统,此解决方案当前会暴露字节序问题。

减轻这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:5)

来自cppreference

  

对于无符号和正数a,a << b的值是a * 2**b的值,返回类型的模最大模减值加1(即,按位左移,并且移出目标类型会被丢弃)。

这里没有关于字节序的信息。你可以做

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

明确地说。