Как использовать старшие и младшие байты? - PullRequest
15 голосов
/ 23 мая 2011

Я пытаюсь представить 32768, используя 2 байта.Для старшего байта я использую те же значения, что и младший байт, и он будет интерпретировать их по-разному, или я выставлю фактические значения?Так я бы поставил что-то вроде 32678 0 или 256 0?Или ни того, ни другого?Любая помощь приветствуется.

Ответы [ 6 ]

22 голосов
/ 23 мая 2011

В шестнадцатеричном формате ваш номер 0x8000, который 0x80 и 0x00. Чтобы получить младший байт от входа, используйте low=input & 0xff, а чтобы получить старший байт, high=(input>>8) & 0xff.

Получить входные данные от младшего и старшего байсов, например, так: input=low | (high<<8).

Убедитесь, что целочисленные типы, которые вы используете, достаточно велики для хранения этих чисел. В 16-битных системах unsigned int / short или signed / unsigned long должны быть достаточно большими.

5 голосов
/ 23 мая 2011

Байты могут содержать только значения от 0 до 255 включительно. 32768 - это 0x8000, поэтому старший байт равен 128, а младший - 0.

0 голосов
/ 19 января 2017

Указатели могут сделать это легко, НАМНОГО БЫСТРЕЕ, чем смены, и не требуют никакой математики процессора.

Проверьте этот ответ

НО: Если я понял вашу проблему, вам нужно хранить до 32768 в 2 байтах, поэтому вам нужно 2 беззнаковых целых или 1 беззнаковый длинный. Просто поменяйте int на долгое время и char на int, и все будет хорошо.

0 голосов
/ 07 мая 2016

Попробуйте эту функцию. Передайте свои Hi_Byte и Lo_Byte в функцию, она возвращает значение в виде Word.

WORD MAKE_WORD( const BYTE Byte_hi, const BYTE Byte_lo)
{
     return   (( Byte_hi << 8  ) | Byte_lo & 0x00FF );
}
0 голосов
/ 23 мая 2011

32768 в шестнадцатеричном формате - это 0080 на платформе с прямым порядком байтов.«Старший» (второй в нашем случае) байт содержит 128, а «младший» - 0.

0 голосов
/ 23 мая 2011

32768 - это 0x8000, поэтому вы должны поместить 0x80 (128) в старший байт и 0 в младший байт.

Это предполагает, что значения без знака, конечно. 32768 не является допустимым значением для 16-разрядного значения со знаком.

...