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