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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值