从uint16转换为endian-safe,其值小于256到uint8

ami*_*one -1 c++

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

uint16_t u16_value = 100;
uint8_t u8_value = u16_value << 8;
Run Code Online (Sandbox Code Playgroud)

如果从little-endian(我当前的系统)转移到big-endian系统,这个解决方案目前会暴露字节序问题.

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

Kev*_*vin 5

来自cppreference

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

这里没有关于字节序的东西.你可以这样做

uint16_t u16_value = 100;
uint8_t u8_value = u16_value;
Run Code Online (Sandbox Code Playgroud)

要么

uint16_t u16_value = 100;
uint8_t u8_value = static_cast<uint8_t>(u16_value);
Run Code Online (Sandbox Code Playgroud)

要明确.