TinyOS: Как я могу преобразовать uint_16 в два целых числа uint_8 (шифрование AES)

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

Я хочу реализовать шифрование AES для данных датчика, используя компоненты, представленные здесь: http://tinyos.cvs.sourceforge.net/viewvc/tinyos/tinyos-2.x-contrib/crypto/index.html

Мой план состоит в том, чтобы уменьшить буфер данных с 10 до 8 в Oscilloscope.h. Это изменяет общий размер данных до 128 бит (такой же, как размер блока в AES). Теперь единственной проблемой является то, что каждый элемент массива в блоке AES - это unit_8, но элементы массива буфера данных - это uint_16.

Могу ли я в любом случае "разделить" значение uint_16 на верхний и нижний биты? Затем я бы сохранил их как 2 элемента в моем блочном массиве AES.

Чтобы уточнить, у меня есть uint_16, который соответствует некоторым данным, считанным датчиком. Я хочу иметь возможность хранить это значение в 2 значениях uint_8. Затем я зашифрую блок данных, отправлю пакет на базовую станцию, а базовая станция расшифрует и объединит значения с исходным uint_16.

1 ответ

Конечно, просто храните младшие восемь бит в одной переменной, а старшие восемь - в другой

unit8_t low = value & 0xFF;
uint8_t high = (value >> 8) & 0xFF;

(побитовый и излишний в обоих случаях, так как преобразование в uint8_t указано сделать то же самое).

Чтобы получить uint16_t значение из частей, вам нужно сдвиг и побитовый или,

uint16_t reassembled = ((uint16_t)high << 8) | low;

Поскольку целочисленные преобразования выполняются в аргументах оператора сдвига, приведение к uint16_t не нужно, если int ширина более 16 бит, но если int шириной ровно 16 бит, сдвиг может привести к неопределенному поведению, поскольку значение high*256 не должны быть представимы как int тогда, чтобы быть в безопасности, перед сменой необходим литой состав. Если int ширина 16 бит, uint16_t полученный от броска тогда будет преобразован в unsigned int - если у вас нет извращенной реализации, где ширина unsigned int меньше, чем у int - иначе int, но это достаточно широко, то.

Другие вопросы по тегам