Я пытаюсь объединить 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
.Любая помощь приветствуется!