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

问题描述 投票:-2回答:1

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

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

我需要将这两个十六进制数合并为一个,所以结果应该是0x2AC

我的意思是二进制它看起来像01010101100所以结果是1010101100

我想我应该使用按位运算符来做这个,但我不知道如何。谢谢。

c int bit-manipulation concatenation unsigned
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.