如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
How convert an unsigned int to two unsigned shorts in C++?
我最初有2 WORD
(那是4个字节)。我已经将它们存储在unsigned int
中.如何拆分它,以便在一个unsigned short
变量中有 2(最左边)字节,在另一个unsigned short
变量中有另外 2 个字节?
我希望我的问题清楚,否则请告诉我,我会添加更多详细信息! :)
示例:我将这个十六进制存储在无符号的 int:4f07aabb
我怎样才能把它变成两条未签名的短裤,让其中一条拿着4f07
,另一条拿着aabb
?
如果您确定目标系统上unsigned int
至少有 4 个字节(这不能保证!),您可以执行以下操作:
unsigned short one = static_cast<unsigned short>(original >> (2 * 8));
unsigned short two = static_cast<unsigned short>(original % (1 << (2 * 8)));
仅当原始值确实只包含一个 4 字节值(前面可能带有填充零)时,才能保证有效。如果你不喜欢位移,你也可以做
uint32_t original = 0x4f07aabb; // guarantee 32 bits
uint16_t parts[2];
std::memcpy(&parts[0], &original, sizeof(uint32_t));
unsigned short one = static_cast<unsigned short>(parts[0]);
unsigned short two = static_cast<unsigned short>(parts[1]);
这将根据目标系统的字节序产生两个值;在立端序架构上,结果是相反的。您可以检查即将到来的 C++20std::endian::native
的字节序。
相关文章:
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 获取隐式转换溢出从无符号到已签名的警告
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- C ++中无符号位长度类型之间的隐式转换,即uint8_t,uint16_t
- 将浮点数转换为无符号字符数组并打印出来
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 将无符号转换为复杂<int>原因符号转换警告
- 如何解决隐式转换丢失整数精度:'size_t'(又名"无符号长")到'int'警告?
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 将无符号字符 C++ 转换为 C#
- C++:使用没有位移位的指针将无符号字符转换为无符号 int
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 将字符串转换为无符号字符数组/字节数组
- 如何将字符串转换为无符号字符数组