Преобразование прямого порядка байтов в обратный порядок байтов, включая 0 (ноль)

Я пытаюсь преобразовать прямой порядок байтов в прямой порядок байтов и возникают проблемы. У меня есть массив с 2 байтами беззнакового char, который является шестнадцатеричным значением. и я хотел бы сделать это с прямым порядком байтов, так как нули ушли, и я не могу получить нужные значения.

Например, Моя цель - получить

array[0] = 0b
array[1] = 40
output = 0b40 so i can see this value as 2880 when %d

так что я использовал

output = (array[1]>>4) | (array[0]<<4);

но на самом деле я вижу

printf("output = %x04\n", output);
output = 00b4

Я хочу, чтобы результат был 0b40, чтобы я мог получить 2880, когда я сделаю

printf("output = %x\n", output);
output = 0b40

printf("output = %d\n", output);
output = 2880

спасибо, ребята, любая помощь будет оценена


person Jay Cho    schedule 20.04.2013    source источник


Ответы (1)


Вам нужно сдвинуть снизу вверх на восемь бит, а не на четыре, и не сдвинуть верх:

output = (array[0]<<8) | array[1];

См. преобразование прямого порядка байтов в обратный порядок байтов в C для более подробного обсуждения и кода.

person RichieHindle    schedule 20.04.2013