Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

typecast

在不更改基础数据的情况下转换数据类型

说明

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 位整数组成的 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

   4d   3c   2b   1a

Y = typecast(X,'single')
Y = single
   1a2b3c4d

创建一个由 32 位无符号整数组成的 1×3 向量。

X = uint32([1 255 256])
X = 1x3 uint32 row vector

     1   255   256

使用 typecastX 转换为 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

比较 typecastcast 的输出,了解两个函数的不同之处。

Z = cast(X,'uint8')
Z = 1x3 uint8 row vector

     1   255   255

X2 = cast(Z,'uint32')
X2 = 1x3 uint32 row vector

     1   255   255

将整数从较小的数据类型 (uint8) 转换为较大的数据类型 (uint16)。使用十六进制表示来显示位模式的重新排列。typecast 函数以 little-endian 样式返回输出,从而将输入数据的四个 8 位段组合起来以生成两个 16 位段。

format hex
X = uint8([44 55 66 77])
X = 1x4 uint8 row vector

   2c   37   42   4d

Y = typecast(X,'uint16')
Y = 1x2 uint16 row vector

   372c   4d42

您可以使用 swapbytes 函数将 little-endian 输出转换为 big-endian 输出(或相反)。

Y = swapbytes(typecast(X,'uint16'))
Y = 1x2 uint16 row vector

   2c37   424d

输入参数

全部折叠

输入数组,指定为标量或向量。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

新数据类型,指定为 'single''double''int8''int16''int32''int64''uint8''uint16''uint32''uint64'

如果 type 的位大小比 X 中每个元素的位大小大 n 倍,则 X 中的元素数必须是 n 的整数倍,才能将 X 转换为数据类型 type。否则,MATLAB® 将引发错误。

提示

  • 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(或相反)。

扩展功能

版本历史记录

在 R2006a 之前推出

另请参阅

| |