我已经将uint8值声明为A = [4, 8, 16, 32];,并将其转换为B = typecast(uint8(A), 'uint16')值,但答案是2052 8208 --如果有人能帮助我理解其背后的原因,我将非常感激。
发布于 2016-04-12 07:50:19
MATLAB的类型转换函数不改变底层数据,就可以转换数据类型。换句话说,它不会改变数据结构的底层内存表示,而只是将其视为一个uint16而不是uint8。
在这种情况下,您希望在转换后将数据保留到原始值。因此,您确实希望MATLAB更改数据结构的内存表示形式。有两种方法可以执行这种类型的铸造:
-using浇铸函数
B = cast(uint8(A), 'uint16');-using对uint16函数的直接调用:
B = uint16(A);结果:
B =
4 8 16 32发布于 2016-04-12 07:52:34
您可能期望Matlab将您的uint8值只放在uint16变量中。这不是类型广播函数正在做的事情。它将保留从输入到输出的字节数。因此,在您的示例中,它将4和8的位表示合并到一个uint16数字中,并等效于16和32。
因此,4的二进制表示为00000100,8的二进制表示为00001000,并合并到一起(以16位数表示),它们给出0000100000000100,即2052年。
https://stackoverflow.com/questions/36566618
复制相似问题