Nano Hash - криптовалюты, майнинг, программирование

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, который соответствует некоторым данным, считанным датчиком. Я хочу иметь возможность хранить это значение в двух значениях uint_8. Затем я зашифрую блок данных, отправлю пакет на базовую станцию, а базовая станция расшифрует и объединит значения с исходным uint_16.

01.12.2012

Ответы:


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, но тогда этого достаточно.

01.12.2012
  • Хорошо, я попробую. Спасибо. 01.12.2012
  • Чтобы объединить их, я просто поменял бы операции? Я бы сделал сдвиг влево по высокому, а затем побитовому и обоим значениям? 01.12.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..