十六进制和二进制值
您可以将数字表示为十六进制或二进制值。在某些情况下,这些表示方式更加方便。例如,您可以使用二进制值来表示硬件寄存器的位。在 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
指定有符号整数类型时,您也可以将负数写作字面值。用 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
将十六进制和二进制值表示为文本
您还可以使用 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
| bitshift
| bitset
| dec2bin
| dec2hex
| hex2dec
| sprintf
| sscanf