C++ 如何在C+中将一个无符号int转换为两个无符号short+;?

C++ 如何在C+中将一个无符号int转换为两个无符号short+;?,c++,type-conversion,byte,C++,Type Conversion,Byte,我原来有两个单词(4个字节)。我已将它们存储在一个无符号int中。如何将其拆分,以便在一个无符号short变量中有2个(最左侧)字节,在另一个无符号short变量中有另外2个字节 我希望我的问题是清楚的,否则请告诉我,我会补充更多细节!:) 示例:我将此十六进制存储在无符号int中:4f07aabb 如何将其转换为两个无符号短字符,使其中一个保持4f07,另一个保持aabb?如果您确定目标系统上的unsigned int至少有4个字节(这不是保证!),则可以执行以下操作: unsigned sh

我原来有两个单词(4个字节)。我已将它们存储在一个
无符号int
中。如何将其拆分,以便在一个
无符号short
变量中有2个(最左侧)字节,在另一个
无符号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)));
unsigned short one=static_cast(原始>>(2*8));
unsigned short two=static_cast(原始%(1如果您确定
unsigned int
在您的目标系统上至少有4个字节(这不是保证!),则可以执行以下操作:

unsigned short one = static_cast<unsigned short>(original >> (2 * 8));
unsigned short two = static_cast<unsigned short>(original % (1 << (2 * 8)));
unsigned short one=static_cast(原始>>(2*8));

unsigned short two=static_cast(原始%(1)请发布代码,以了解您的想法want@Berto99我没有在我的问题中添加任何代码,只是添加了一个示例。我希望它能让我的问题更清楚(:请张贴代码,以便了解您的想法want@Berto99我没有在我的问题中添加任何代码,只是添加了一个示例。我希望它能让我的问题更清楚(:
unsigned short
总是至少有2个字节。
unsigned int
不一定有4个字节。一个字节不一定是8位;它至少是8位,但在过去它有时是9位,在现代它有时是32位。@PeteBecker目标系统上有8位的字节可以从这个问题中推断出来,我删除了t他评论了
无符号短字符
。你可以编写这段代码,这样它就不会依赖于对字节大小的假设,而是使用
字符位
,而不是8。@PeteBecker是的,但是当问题明确说明假设成立时,我尽量不过度概括代码。@flyx这种方法还有另一个问题:orde字节的r取决于CPU体系结构。在一个系统上,您可能会得到
one==0x4f07
,而在另一个系统上,您可能会得到
one==0xaabb
。通过移位,无论CPU如何,您总是会得到低阶字节和高阶字节。另一方面,有时您确实希望字节按内存顺序排列,而不是按重要性顺序排列,尽管h我认为这种情况相当罕见。
无符号短
总是至少有2个字节。
无符号整数
不一定有4个字节。一个字节不一定是8位;它至少是8位,但在过去有时是9位,在现代有时是32位。@PeteBecker目标系统上有8位的字节可以推断我从问题中删除了关于
unsigned short
的注释。你可以编写这段代码,这样它就不会依赖于字节大小的假设,使用
CHAR\u BIT
而不是8。@PeteBecker是的,但是当问题明确说明假设成立时,我尽量不过度概括代码。@flyx还有另一个pro这种方法的缺点是:字节的顺序取决于CPU体系结构。在一个系统上,您可能会得到
one==0x4f07
,而在另一个系统上,您可能会得到
one==0xaabb
。通过移位,无论CPU如何,您总是得到低阶字节和高阶字节。另一方面,有时您确实希望字节按内存顺序排列,而不是按内存顺序排列重要的顺序,尽管我认为这种情况相当罕见。