typecast
在不更改基础数据的情况下转换数据类型
说明
示例
将整数转换为相同存储大小的无符号整数
将整数转换为相同存储大小的无符号整数。
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
4d 3c 2b 1a
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
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
输入参数
X
— 输入数组
标量 | 向量
输入数组,指定为标量或向量。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
type
— 新数据类型
'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
与 MATLABcast
函数的区别在于,它不会更改输入数据。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(或相反)。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
数据类型参量的值必须为小写。
当您将
typecast
与 MATLAB Function 模块中继承的输入端口数据类型结合使用时,软件可能会引发大小错误。要避免此错误,请显式指定模块输入端口数据类型。整数输入或结果类必须直接映射到目标硬件上的 C 类型。
输入必须为可变长度向量或固定大小向量。请参阅Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder)。
输出向量的方向始终与输入向量相同。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
用法说明和限制:
数据类型参量的值必须为小写。
当您将
typecast
与 MATLAB Function 模块中继承的输入端口数据类型结合使用时,软件可能会引发大小错误。要避免此错误,请显式指定模块输入端口数据类型。整数输入或结果类必须直接映射到目标硬件上的 C 类型。
输入必须为可变长度向量或固定大小向量。
输出向量的方向始终与输入向量相同。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
此函数完全支持 GPU 数组。有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
此函数完全支持分布式数组。有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)