Можно представлять числа как шестнадцатеричные или двоичные значения. В некоторых контекстах эти представления чисел более удобны. Например, можно представлять биты аппаратного регистра с помощью двоичных значений. В 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
-9A
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
Когда вы задаете типы целого числа со знаком, можно записать литералы, которые представляют отрицательные числа. Представляйте отрицательные числа в дополнительной форме 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
"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'
bin2dec
| bitand
| bitset
| bitshift
| dec2bin
| dec2hex
| hex2dec
| sprintf
| sscanf