Шестнадцатеричные и двоичные значения

Можно представлять числа как шестнадцатеричные или двоичные значения. В некоторых контекстах эти представления чисел более удобны. Для примера можно представлять биты регистра оборудования с помощью двоичных значений. В MATLAB ® существует два способа представления шестнадцатеричных и двоичных значений:

  • Как литералы. Начиная с R2019b, можно записать шестнадцатеричные и двоичные значения как литералы с помощью соответствующего префикса в качестве обозначения. Для примера, 0x2A является литералом, который задает 42 - и MATLAB хранит его как число, а не как текст.

  • Как строки или векторы символов. Для примера, вектор символов '2A' представляет число 42 в виде шестнадцатеричного значения. Когда вы представляете шестнадцатеричное или двоичное значение с помощью текста, заключайте его в кавычки. MATLAB сохраняет это представление как текст, а не число.

MATLAB обеспечивает несколько функций для преобразования чисел в и из их шестнадцатеричных и двоичных представлений.

Запись целых чисел с использованием шестнадцатеричного и двоичного обозначения

Шестнадцатеричные литералы начинаются с 0x или 0X префикс, в то время как двоичные литералы начинаются со 0b или 0B префикс. MATLAB сохраняет число, записанное этим обозначением, как целое число. Для примера эти две литералы оба представляют целое число 42.

A = 0x2A
A = uint8
    42
B = 0b101010
B = uint8
    42

Не используйте кавычки, когда вы записываете число с помощью этого обозначения. Использование 0- 9, A- F, и a- f для представления шестнадцатеричных цифр. Использование 0 и 1 для представления двоичных цифр.

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

  • Чтобы задать беззнаковые 8-, 16-, 32- и 64-битные целые типы, используйте суффиксы u8, u16, u32, и u64.

  • Чтобы задать знаковые 8-, 16-, 32- и 64-битные целые типы, используйте суффиксы s8, s16, s32, и s64.

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

A = 0x2As32
A = int32
    42

Когда вы задаете целые типы со знаком, можно записать литералы, которые представляют отрицательные числа. Представление отрицательных чисел в форме дополнения двух. Например, задайте отрицательное число с литералом, используя s8 суффикс.

A = 0xFFs8
A = int8
    -1

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

Представление шестнадцатеричных и двоичных значений как текста

Можно также преобразовать целые числа в векторы символов, которые представляют их в виде шестнадцатеричных или двоичных значений, используя dec2hex и dec2bin функций. Преобразуйте целое число в шестнадцатеричное.

hexStr = dec2hex(255)
hexStr = 
'FF'

Преобразуйте целое число в двоичное.

binStr = dec2bin(16)
binStr = 
'10000'

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

Представление массивов шестнадцатеричных значений в виде текста

Рекомендуемый способ преобразования массива чисел в текст - использовать compose функция. Эта функция возвращает строковые массивы, имеющий тот же размер, что и входной числовой массив. Для создания шестнадцатеричного формата используйте %X в качестве спецификатора формата.

A = [255 16 12 1024 137]
A = 1×5

         255          16          12        1024         137

hexStr = compose("%X",A)
hexStr = 1x5 string
    "FF"    "10"    "C"    "400"    "89"

The dec2hex и dec2bin функции также преобразуют массивы чисел в текст, представляющий их в виде шестнадцатеричных или двоичных значений. Однако эти функции возвращаются символьные массивы, где каждая строка представляет число из входа числового массива, заполненное нулями по мере необходимости.

Преобразуйте двоичные представления в шестнадцатеричные

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

D = 0b1111;
hexStr = dec2hex(D)
hexStr = 
'F'

Если вы начинаете с шестнадцатеричного литерала, то можно преобразовать его в текст, представляющий его двоичное значение с помощью dec2bin.

D = 0x8F;
binStr = dec2bin(D)
binStr = 
'10001111'

Побитовые операции с двоичными значениями

Одним из типичных видов использования двоичных чисел является представление бит. Для примера многие устройства имеют регистры, которые обеспечивают доступ к набору бит, представляющих данные в памяти или состоянии устройства. При работе с таким оборудованием можно использовать числа в MATLAB, чтобы представлять значение в регистре. Используйте двоичные значения и побитовые операции, чтобы представлять и получить доступ к конкретным битам.

Создайте число, которое представляет 8-битный регистр. Начинать удобно с двоичного представления, но число сохранено в виде целого числа.

register = 0b10010110
register = uint8
    150

Чтобы получить или задать значения конкретных бит, используйте побитовые операции. Для примера используйте bitand и bitshift функции для получения значения пятого бита. (Сдвиньте этот бит в первое положение, чтобы MATLAB вернул 0 или 1. В этом примере пятый бит является 1.)

b5 = bitand(register,0b10000);
b5 = bitshift(b5,-4)
b5 = uint8
    1

Чтобы перевернуть пятый бит в 0, используйте bitset функция.

register = bitset(register,5,0)
register = uint8
    134

Начиная с register является целым числом, используйте dec2bin функция для отображения всех бит в двоичном формате. binStr является вектор символов и представляет двоичное значение без начального значения 0b префикс.

binStr = dec2bin(register)
binStr = 
'10000110'

См. также

| | | | | | | |

Похожие темы

Внешние веб-сайты

Для просмотра документации необходимо авторизоваться на сайте