exponenta event banner

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

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

См. также

| | | | | | | |

Связанные темы

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