我正在与一个返回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系统,这个解决方案目前会暴露字节序问题.
减轻这种情况的最佳方法是什么?
对于无符号和正数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)
要明确.