在C中串联十六进制字节

时间:2019-01-22 23:48:34

标签: c hex

我正在尝试将4个十六进制字节连接在一起,并且遇到了一些麻烦。

我有一个32位数字,表示为4个十六进制字节(x)。我还有另一个4位数字,我将2的补码作为(twos_complement),然后将其转换为十六进制表示形式(ne)。然后,我想将单个字节(ne)细分为原始32位数字(x)的第三个字节。这是我到目前为止的内容:

unsigned replace_byte(unsigned x, unsigned char b) {
    unsigned new;
    unsigned int twos_complement;
    twos_complement = (~b) +1;

unsigned int ne = (twos_complement & 0xff);
unsigned int one = (x >> 24) & 0xff;
unsigned int two = (x >> 16) & 0xff;
unsigned int three = (x >> 8) & 0xff;
unsigned int four = x & 0xff;
printf("one 0x%x, two 0x%x, three 0x%x, four 0x%x\n",one, two, three, four);

new = (one<<24) | (two<<16) | (ne) | (four) ;
printf("new 0x%x", new);}

当我为i输入11123243336并为b输入3时,我得到的十六进制值分别为i = 0x96ff3948b = 0xfffffffd。运行此命令时,我期望new时得到0x96ff00fd0x96fffd48。 任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

对我来说,要实现的目标还不是很清楚,但是从您的预期中我可以猜到,您只需要将ne移8位,所以:

new = (one<<24) | (two<<16) | (ne<<8) | (four) ;