如何在C中合并2个不同的unsigned int

时间:2019-03-03 16:17:37

标签: c int bit-manipulation concatenation unsigned

我正在尝试合并数组中的两个无符号整数。 看起来像

hex[0] == 0x0A;
hex[1] == 0x2C;

我需要将这两个十六进制数合并为一个,因此结果应为0x2AC

我的意思是用二进制表示 01010101100,因此结果为1010101100

我认为我应该使用按位运算符来执行此操作,但是我不知道如何执行。 谢谢。

1 个答案:

答案 0 :(得分:1)

不确定要确切了解什么,但我假设您有两个未签名的字符a和b,其值为

a=0xUV;  
b=0xWY;

其中U,V,W和Y是形成这些值的4位半字节。看来您想要由零碎UWVY构成的无符号空缺。因此,在您的情况下,U == 0,V == A,W == 2和Y == C

这可以通过掩盖和移动来完成。使用0x0f进行掩蔽会提取较低的半字节,而使用0xf0进行掩蔽会提取较高的半字节。并且将它们移动到最终结果的适当位置就足够了。

这可以通过以下C代码完成

unsigned char a=0x0A;
unsigned char b=0x2C;
unsigned short result=  (a&0xf0)<<8) // gives 0x0000
                      | (a&0x0f)<<4) // gives 0x00A0
                      | (b&0xf0)<<4) // gives 0x0200
                      | (b&0x0f);    // gives 0x000C