C++ Matlab中的typecast
我理解了Matlab中帮助文件中typecast的解释。 但我无法应付我的结果。我试着按如下方式键入一个3x4矩阵C++ Matlab中的typecast,c++,matlab,C++,Matlab,我理解了Matlab中帮助文件中typecast的解释。 但我无法应付我的结果。我试着按如下方式键入一个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 1
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;
float f=-0.0022;
无符号短a=静态_转换(f);
无符号短b=静态_转换(f)>>16;
我不能将a和b设为65304和47886。值-0.0022正在转换为两个16位的值,这意味着您的值是single(而不是double)类型 让我们换一种方式试试
>> 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.00。由于您的环境使用默认的short
,因此您看不到所有有效数字。如果你试试这个
>> format long e
>> typecast(uint16([65304 47886]), 'single')
ans =
-2.1819528e-003
或者在您的环境中使用
>> format long e
>> A(1)
你发现数组中的实际值,并在C++代码中使用它,应该返回正确的值。但是仍然缺少一些东西。如果我尝试C++中的浮点F= -8787.999 E+ 001;无符号短a=静态_转换(f);无符号短b=静态_转换(f)>>16;我有65449和65535。然后我做了typecast(uint16([65449 65535]),“single”),我得到了NaN。@batuman我想你需要使用
重新解释cast
而不是静态cast
。准确地看这个问题。我喜欢浮点数f=-8.78799e+001;无符号短a=*重新解释铸件(&f);无符号短b=*重新解释铸件(&f)>>16;结果与Matlab中的结果一致。