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

Можно представлять числа как шестнадцатеричные или двоичные значения. В некоторых контекстах эти представления чисел более удобны. Например, можно представлять биты аппаратного регистра с помощью двоичных значений. В 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-9AF, и aF представлять шестнадцатеричные цифры. Используйте 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

Когда вы задаете типы целого числа со знаком, можно записать литералы, которые представляют отрицательные числа. Представляйте отрицательные числа в дополнительной форме two. Например, задайте отрицательное число с литералом с помощью 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 array
    "FF"    "10"    "C"    "400"    "89"

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'

Смотрите также

| | | | | | | |

Похожие темы