在C语言中连接十六进制字节

在C语言中连接十六进制字节,c,hex,C,Hex,我试图将4个十六进制字节连接在一起,但遇到了一些麻烦 我有一个32位的数字,表示为4个十六进制字节x。我还有一个4位的数字,我把2的补码作为两个s_补码,然后把它转换成十六进制表示形式。然后我想把单字节ne作为原始32位数字x的第三个字节。以下是我到目前为止的情况: unsigned replace_byte(unsigned x, unsigned char b) { unsigned new; unsigned int twos_complement; twos_co

我试图将4个十六进制字节连接在一起,但遇到了一些麻烦

我有一个32位的数字,表示为4个十六进制字节x。我还有一个4位的数字,我把2的补码作为两个s_补码,然后把它转换成十六进制表示形式。然后我想把单字节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。当我运行这个程序时,当我期待0x96fffd48时,我会得到新的0x96ff00fd。
感谢您的帮助

我不太清楚您想要实现什么,但根据您的预期,我猜您只需要将ne移动8位,因此:


new=OneWareed endianness执行此操作时,注意endianness-不同的体系结构可以给出不同且令人惊讶的答案。@MichaelDorgan不是位运算符endianness证明吗?当然,但在位运算符之后的字中高低字节的位置肯定不是。@MichaelDorgan但这会对他的代码产生什么影响?他没有直接访问内存中单词的一个字节。例如,endianness如何影响new的价值?我知道它在内存中看起来可能不同,但值应该是相同的。好的,我认为你可能适合这种情况。值得一提的是,甚至可以快速浏览printf输出。