При использовании библиотеки IRremote - почему она говорит 64 бита, когда после преобразования шестнадцатеричного кода в двоичный он становится меньше?

Я получаю этот код, выводимый на мой последовательный, когда ИК - приемник получает сигнал:

Protocol  : GREE
Code      : 0x01C02350000000E0 (64 Bits)
Mesg Desc.: Model: 1 (YAW1F), Power: Off, Mode: 1 (Cool), Temp: 16C, Fan: 0 (Auto), Turbo: Off, Econo: Off, IFeel: Off, WiFi: Off, XFan: Off, Light: On, Sleep: Off, Swing(V) Mode: Manual, Swing(V): 0 (Last), Swing(H): 0 (Off), Timer: 23:00, Display Temp: 0 (Off)
uint16_t rawData[279] = {...

Однако когда я конвертирую 0x01C02350000000E0 в двоичный файл, он обычно получается менее 64 бит. Я предполагаю, что это связано с параметрами моего ИК-приемника, а не с нормальными.

, 👍0

Обсуждение

шестнадцать шестнадцатеричных цифр равны 64 двоичным цифрам ... это то, что вписывается в восемь байтов данных ... Какое двоичное число вы получаете от `0x01C02350000000E0'?, @jsotola

Я не совсем понимаю этот вопрос. 0x01C02350000000E0-это 16-значное шестнадцатеричное число, которое напрямую переводится в 16x4 = 64 бита. Что вы имеете в виду, говоря, что это "обычно" выходит как нечто меньшее? Разве вы не считаете ведущие нули? Они тоже являются битами., @StarCat

Однако "Когда я конвертирую 0x01C02350000000E0 в двоичный файл, он обычно получается менее 64 бит" - это все равно, что сказать: "когда я добавляю 2 плюс 2, он обычно получается 4"., @jsotola


1 ответ


Лучший ответ:

0

Вы путаете размер данных и размер значения.

Да, ваше значение может быть представлено с использованием менее 64 бит, но размер данных, используемых для хранения этого значения, составляет 64 бита.

Это все равно что сказать, что "4" хранится в 6 - значном хранилище. Ему нужен только 1 слот для хранения, но выделенное пространство составляет 6 цифр. Таким образом, то, что на самом деле хранится, будет "000004".

Как люди, мы склонны отбрасывать ведущие нули, потому что они бессмысленны. Это потому, что мы можем использовать гибкие размеры памяти в нашем мозге. Однако компьютер работает с фиксированными размерами - 8 бит, 16 бит, 32 бита, 64 бита и т. Д.

Вы не можете хранить это значение в 32-битной переменной, но вы можете хранить его в 64-битной. Это может быть расточительно для этой конкретной ценности, но это самый маленький доступный размер, который достаточно велик.

,