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