Объединение шестнадцатеричных байтов в C - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь объединить 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);}

Когда я ввожу 11123243336 для i и 3 как b, я получаю свои шестнадцатеричные значения как i = 0x96ff3948 и b = 0xfffffffd.Когда я запускаю это, я получаю new как 0x96ff00fd, когда я ожидаю 0x96fffd48.Любая помощь приветствуется!

1 Ответ

0 голосов
/ 23 января 2019

Мне не совсем понятно, чего вы хотите достичь, но из того, что вы ожидаете, я предполагаю, что вам просто нужно сдвинуть ne на 8 битов, так:

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

...