在Matlab中进行类型转换

时间:2013-08-19 06:41:50

标签: c++ matlab

我理解了如何在Matlab的帮助文件中解释类型转换。 但无法应付我的结果。我尝试按照以下方式对3x4矩阵进行类型转换。

A= -0.0022  -87.8788  -96.2848  -96.9586
    0.9891  -52.9250  -52.7722  -52.7780
    0.1473   -4.8680   -6.0184   -5.9894

ANS = typecast(A(:), 'uint16');

然后ANS矢量变为

ANS=65304
    47886
    13518
    16253
    55853
    15894
    49650
    49839
    45875
    49747
    50835
    49307
    37329
    49856
     5820
    49747
    38546
    49344
    60110
    49857
     7340
    49747
    43369
    49343

这意味着-0.0022有两个16位值65304和47886。 它是如何计算的? 那么我该如何在C ++中实现呢? 在C ++中,我实现了像

float f = -0.0022;
unsigned short a = static_cast<unsigned int>(f);
unsigned short b = static_cast<unsigned int>(f)>>16;

我不能将a和b作为65304和47886。

1 个答案:

答案 0 :(得分:8)

值-0.0022正在转换为两个16位值,这意味着您的值是单个(不是双精度)类型。

让我们尝试相反的方式

>> typecast(uint16([65304 47886]), 'single')

ans =

   -0.0022

现在让我们看看这些值的十六进制表示如下:

>> format hex
>> uint16([65304 47886])

ans =

   ff18   bb0e

>> d=typecast(uint16([65304 47886]), 'single')

d =

   bb0eff18

现在您看到第一个值65304是LSB 16位,47886是16位MSB。因此,您的C ++实现是正确的。您在C ++中未获得正确值的原因是该值不完全等于-0.0022。由于您的环境使用short的默认format,因此您看不到所有有效数字。如果你试试这个

>> format long e
>> typecast(uint16([65304 47886]), 'single')

ans =

  -2.1819528e-003

或在您的环境中使用

>> format long e
>> A(1)

您在数组中找到实际值,并在C ++代码中使用它,应该返回正确的值。