MATLAB中typecast函数用法
目录
语法
说明
示例
将整数转换为相同存储大小的无符号整数
将 8 位整数转换为单精度
将 32 位整数转换为 8 位整数
将 8 位整数转换为 16 位整数
提示
typecast函数的功能是在不更改基础数据的情况下转换数据类型。
语法
Y = typecast(X,type)
说明
Y = typecast(X,type) 将 X 的位模式转换为 type 指定的数据类型,而不更改基础数据。X 必须为由非复数数值组成的满标量或满向量。
示例
将整数转换为相同存储大小的无符号整数
将整数转换为相同存储大小的无符号整数。
X = int16(-1)
X = int16
-1
Y = typecast(X,'uint16')
Y = uint16
65535
以十六进制表示形式显示位模式。使用 typecast 转换数据类型不会更改基础数据。
format hex
X
X = int16
ffff
Y = typecast(X,'uint16')
Y = uint16
ffff
将 8 位整数转换为单精度
定义一个由 8 位整数组成的 1×4 向量。
X = int8([77 60 43 26])
X = 1x4 int8 row vector
77 60 43 26
将使用 4 个字节(32 位)存储的四个 8 位整数转换为也使用 4 字节存储的单精度数。
Y = typecast(X,'single')
Y = single
3.5411e-23
以十六进制表示形式显示位模式。在十六进制记数法中,1 个字节(8 位)用两位数表示。typecast 函数在不修改数据的情况下重新排列位模式。
format hex
X
X = 1x4 int8 row vector
77 60 43 26
Y = typecast(X,'single')
Y = single
1a2b3c4d
将 32 位整数转换为 8 位整数
创建一个由 32 位无符号整数组成的 1×3 向量。
X = uint32([1 255 256])
X = 1x3 uint32 row vector
1 255 256
使用 typecast 将 X 转换为 8 位无符号整数。每个 32 位值划分为四个 8 位段。在 little-endian 系统上运行此代码会生成以下结果。
Y = typecast(X,'uint8')
Y = 1x12 uint8 row vector
1 0 0 0 255 0 0 0 0 1 0 0
X 的第三个元素 256 超过了 8 个位可以容纳的最大值。因此,Y(9) 中的转换值溢出到 Y(10)。
Y(9:12)
ans = 1x4 uint8 row vector
0 1 0 0
可以将 Y 转换回 32 位无符号整数,而无需更改基础数据。
X2 = typecast(Y,'uint32')
X2 = 1x3 uint32 row vector
1 255 256
比较 typecast 和 cast 的输出,了解两个函数的不同之处。
Z = cast(X,'uint8')
Z = 1x3 uint8 row vector
1 255 255
X2 = cast(Z,'uint32')
X2 = 1x3 uint32 row vector
1 255 255
将 8 位整数转换为 16 位整数
将整数从较小的数据类型 (uint8) 转换为较大的数据类型 (uint16)。使用十六进制表示来显示位模式的重新排列。typecast 函数以 little-endian 样式返回输出,从而将输入数据的四个 8 位段组合起来以生成两个 16 位段。
format hex
X = uint8([44 55 66 77])
X = 1x4 uint8 row vector
44 55 66 77
Y = typecast(X,'uint16')
Y = 1x2 uint16 row vector
14124 19778
可以使用 swapbytes 函数将 little-endian 输出转换为 big-endian 输出(或相反)。
Y = swapbytes(typecast(X,'uint16'))
Y = 1x2 uint16 row vector
11319 16973
提示
-
typecast 与 MATLAB cast 函数的区别在于,它不会更改输入数据。typecast 在输出 Y 中返回的字节数始终与输入 X 中的字节数相同。例如,使用 typecast 将 16 位整数 1000 转换为 uint8 会以两个 8 位段(3 和 232)的形式返回完整的 16 位,从而保持原始值 (3*256 + 232 = 1000)。而 cast 函数将此输入值截断为 255。
-
typecast 输出的格式可能因您使用的系统而异。某些计算机系统从数据的最低有效字节开始存储数据(称为 little-endian 排序),而其他计算机系统从最高有效字节开始存储数据(称为 big-endian 排序)。您可以使用 swapbytes 函数将字节顺序从 little-endian 反转为 big-endian(或相反)。