我已将uint8值声明为A = [4, 8, 16, 32];
,并将其转换为值B = typecast(uint8(A), 'uint16')
,但答案是2052 8208
如果有人能帮我理解原因,我会非常感激在它背后。
答案 0 :(得分:3)
您可能希望Matlab将uint8
值仅放入uint16
个变量中。这不是类型转换功能正在做的事情。它将保留从输入到输出的字节数。因此,在您的示例中,它将4和8的位表示合并为uint16
数字,并且等效地为16和32。
所以4的二进制表示是00000100,8的是00001000并且合并在一起(到16位数)它们给出0000100000000100,即2052。
答案 1 :(得分:2)
MATLAB的类型转换功能可在不更改基础数据的情况下转换数据类型。换句话说,它不会改变数据结构的底层内存表示,只是将其视为uint16而不是uint8。
在您的情况下,您希望在投射后保留数据的原始值。因此,您确实希望MATLAB更改数据结构的内存表示形式。 有两种方法可以执行这种类型的转换:
- 使用强制转换功能
B = cast(uint8(A), 'uint16');
- 直接调用uint16函数:
B = uint16(A);
结果:
B =
4 8 16 32