Преобразование UINT16 оценивает в массив UINT8 [2]

Можно хотеть исследовать понятие пространства имен . В Python модуль является естественным местом для глобальный данные:

Каждый модуль имеет свою собственную частную таблицу символов, которая используется в качестве глобальной таблицы символов всеми функциями, определяемыми в модуле. Таким образом автор модуля может использовать глобальные переменные в модуле, не волнуясь о случайных столкновениях с user’s глобальные переменные. С другой стороны, если Вы знаете то, что Вы делаете, можно коснуться module’s глобальных переменных с той же нотацией, используемой для обращения к ее функциям, modname.itemname.

А определенное использование global-in-a-module описано здесь - , Как я совместно использую глобальные переменные через модули? , и для полноты содержание совместно используется здесь:

канонический способ поделиться информацией через модули в рамках единственной программы состоит в том, чтобы создать специальный модуль конфигурации (часто называемый конфигурация или cfg). Просто импортируйте модуль конфигурации во всех модулях Вашего приложения; модуль затем становится доступным как глобальное имя. Поскольку существует только один экземпляр каждого модуля, любые изменения, внесенные в объект модуля, отражаются везде. Например:

Файл: файл config.py

x = 0   # Default value of the 'x' configuration setting

: файл mod.py

import config
config.x = 1

: main.py

import config
import mod
print config.x

14
задан Community 23 May 2017 в 11:45
поделиться

5 ответов

Как насчет

UINT16 value = 0xAAFF;
UINT8 array[2];
array[0]=value & 0xff;
array[1]=(value >> 8);

Это должно дать тот же результат независимо от порядка байтов.

Или, если вы хотите использовать инициализатор массива:

UINT8 array[2]={ value & 0xff, value >> 8 };

(Однако это возможно, только если значение является константой.)

30
ответ дан 1 December 2019 в 06:48
поделиться

Предполагая, что вы хотите, чтобы старший байт был выше младшего байта в массиве:

array[0] = value & 0xff;
array[1] = (value >> 8) & 0xff;
4
ответ дан 1 December 2019 в 06:48
поделиться

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

uint16_t value = 0xAAFF;
uint8_t hi_lo[] = { (uint8_t)(value >> 8), (uint8_t)value }; // { 0xAA, 0xFF }
uint8_t lo_hi[] = { (uint8_t)value, (uint8_t)(value >> 8) }; // { 0xFF, 0xAA }

Приведение типов необязательно.

7
ответ дан 1 December 2019 в 06:48
поделиться
union TwoBytes
{
    UINT16 u16;
    UINT8 u8[2];
};

TwoBytes Converter;
Converter.u16 = 65535;
UINT8 *array = Converter.u8;
1
ответ дан 1 December 2019 в 06:48
поделиться

Временное приведение к UINT16 * должно сделать это:

((UINT16*)array)[0] = value;
0
ответ дан 1 December 2019 в 06:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: