Main Content

十六进制和二进制值

您可以将数字表示为十六进制或二进制值。在某些情况下,这些表示方式更加方便。例如,您可以使用二进制值来表示硬件寄存器的位。在 MATLAB® 中,有两种方式来表示十六进制和二进制值:

  • 作为字面值。从 R2019b 开始,您可以使用适当的前缀作为表示法,将十六进制和二进制值写成字面值。例如,字面值 0x2A 指定 42,MATLAB 会将其存储为数字而不是文本。

  • 作为字符串或字符向量。例如,字符向量 '2A' 将数字 42 表示为十六进制值。当您使用文本表示十六进制或二进制值时,请用引号将它括起来。MATLAB 将这种表示存储为文本,而不是数字。

MATLAB 中的一些函数可用于将数字与其十六进制及二进制表示相互转换。

使用十六进制和二进制表示法表示整数

十六进制字面值以 0x0X 前缀开头,而二进制字面值以 0b0B 前缀开头。MATLAB 将采用这种表示法的数字存储为整数。例如,以下两个字面值都表示整数 42

A = 0x2A
A = uint8

42
B = 0b101010
B = uint8

42

当您用此表示法表示数字时,不要用引号。使用 0-9A-Fa-f 表示十六进制数字。使用 01 表示二进制数字。

默认情况下,MATLAB 将数字存储为能够容纳它的最小无符号整数类型。但是,您可以使用可选后缀来指定存储该值的整数类型。

  • 要指定无符号 8 位、16 位、32 位和 64 位整数类型,请使用后缀 u8u16u32u64

  • 要指定有符号 8 位、16 位、32 位和 64 位整数类型,请使用后缀 s8s16s32s64

例如,要存储为有符号 32 位整数的十六进制字面值的表示如下。

A = 0x2As32
A = int32

42

指定有符号整数类型时,您也可以将负数写作字面值。用 2 的补码形式表示负数。例如,您可以使用后缀 s8 以字面值指定负数。

A = 0xFFs8
A = int8

-1

由于 MATLAB 将这些字面值存储为数字,因此您可以在任何使用数值数组的上下文或函数中使用它们。例如,您可以创建一个 64 位有符号整数数组,而不会损失大整数的精度。

C = [0xFF000000001F123As64 0x1234FFFFFFFFFFFs64]
C = 1x2 int64 row vector

   -72057594035891654    81997179153022975

作为比较,当您使用 int64 转换大整数(大于 flintmax)数组时,精度可能会损失,因为 MATLAB 最初默认将数值数组输入表示为双精度。

C_inaccurate = int64([-72057594035891654 81997179153022975])
C_inaccurate = 1x2 int64 row vector

   -72057594035891656    81997179153022976

将十六进制和二进制值表示为文本

您还可以使用 dec2hexdec2bin 函数将整数转换为字符向量,以十六进制或二进制值表示它们。将整数转换为十六进制。

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"

dec2hexdec2bin 函数还将数值数组转换为文本,以十六进制或二进制值表示它们。但是,这些函数返回字符数组,其中每行表示输入数值数组中的一个数字,必要时用零填充。

将二进制表示转换为十六进制表示

要将二进制值转换为十六进制值,请从二进制字面值开始,并将其转换为表示其十六进制值的文本。由于字面值会被解释为数字,您可以将其直接指定为 dec2hex 的输入参量。

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

如果从十六进制字面值开始,则可以使用 dec2bin 将其转换为表示其二进制值的文本。

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

使用二进制值的按位运算

二进制数的一个典型用途是表示位。例如,许多设备都有寄存器,用于访问代表内存中数据或设备状态的位集合。当使用这样的硬件时,您可以在 MATLAB 中使用数字来表示寄存器中的值。使用二进制值和按位运算来表示和访问特定位。

创建一个表示 8 位寄存器的数字。从二进制表示开始很方便,但该数字是以整数形式存储的。

register = 0b10010110
register = uint8

150

要获取或设置特定位的值,请使用位运算。例如,使用 bitandbitshift 函数获得第五位的值。(将该位移至第一个位置,以使 MATLAB 返回 01。在此示例中,第五位是 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'

另请参阅

| | | | | | | |

相关主题

外部网站