从值小于256的uint16到uint8的Endian安全转换
Endian-safe conversion from uint16 with value less than 256 to uint8
我正在与返回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);
要明确。
相关文章:
- 从值小于256的uint16到uint8的Endian安全转换
- 你能把一个向量<int64>投射到一个向量<uint8>吗
- SSCANF 进入 uint8 阵列失败
- 着色器将uint8投射到float,并将其重新解释回uint
- 如何从Little Endian UTF-16编码字节中获取C++std::string
- 将指针uint8覆盖到指针uint16
- 创建一个包含30亿个uint8元素的向量
- 将 Uint8(浮点AUDIO_F32)转换为int16_t(16 位 PCM)
- UINT8/16 /32/etc 和 INT8/16/32/etc 在 libtiff 中不起作用?
- 错误:无法将'uint8* {aka unsigned int*}'转换为"常量emxArray_uint8_T*"?
- 如何在C 中的Little Endian中读取来自二进制文件的单独的十六进制字符
- 将具有不同字段的结构转换为 uint8 的数组
- uint32, int16, uint8 .为什么这些常用的数据类型没有进入标准
- 如何将 uint8 列表转换为其相应的有符号值
- 兼容的声明 __attribute__ ((节( ".abc.dfe" ))) 常量易失性 uint8 属性变量 = 0;- 符合MISRA标准
- 如何将UINT8*施放到UINT32
- 如何将元素从 Swift 中的 [UnsafeMutablePointer<UInt8>] 转换为 C++ 中的 UInt8 *
- 从字符串转换为 uint8,反之亦然
- Opencv C++ 声明一个类型为 uint8 的矩阵
- 为什么编译器不断警告我从“int”缩小到“uint8”