Подтвердить что ты не робот

Как использовать высокие и низкие байты?

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

4b9b3361

Ответ 1

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

Получите вход обратно из нижнего и верхнего байтов так: input=low | (high<<8).

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

32768 в шестнадцатеричном формате - 0080 на платформе little-endian. Байт "высокий" (второй в нашем случае) содержит 128, а "низкий" - 0.

Ответ 5

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

WORD MAKE_WORD( const BYTE Byte_hi, const BYTE Byte_lo)
{
     return   (( Byte_hi << 8  ) | Byte_lo & 0x00FF );
}

Ответ 6

Указатели могут делать это легко, MUCH FASTER, чем сдвиги, и не требуют математики процессора.

Отметьте этот ответ

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