为什么MATLAB uint8值和uint16值不同

时间:2016-04-12 07:38:10

标签: matlab

我已将uint8值声明为A = [4, 8, 16, 32];,并将其转换为值B = typecast(uint8(A), 'uint16'),但答案是2052 8208如果有人能帮我理解原因,我会非常感激在它背后。

2 个答案:

答案 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