我正在尝试将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 = 0x96ff3948
和b = 0xfffffffd
。运行此命令时,我期望new
时得到0x96ff00fd
为0x96fffd48
。
任何帮助表示赞赏!
答案 0 :(得分:2)
对我来说,要实现的目标还不是很清楚,但是从您的预期中我可以猜到,您只需要将ne
移8位,所以:
new = (one<<24) | (two<<16) | (ne<<8) | (four) ;