为什么int16不从十六进制字符串中检索符号?
MATLAB:
>> single(int16(hex2dec('ffff')))
ans =
32767
即
>> int16(hex2dec('ffff')) == int16(hex2dec('8fff'))
ans =
1
为了将其放在一般上下文中,我想在MATLAB中重写以下numpy Python代码段代码:
>>> import numpy as np
>>> i='ffff'
>>> q='3fff'
>>> i_float = np.int16(int(i,16))
>>> i_float = i_float * 2 ** -15
>>> i_float
-3.0517578125e-05
>>> q_float = np.int16(int(q,16))
>>> q_float = q_float * 2 ** -15
>>> q_float
0.499969482421875
最佳答案
这就是我所拥有的。 (是的,它似乎比应该的要复杂得多。)
i_hex = 'ffff'
q_hex = '3fff'
i_int16 = typecast(uint16(hex2dec(i_hex)),'int16')
i_float = single(i_int16) * 2 ^ -15
q_int16 = typecast(uint16(hex2dec(q_hex)),'int16')
q_float = single(q_int16) * 2 ^ -15
输出:
i_hex = ffff
q_hex = 3fff
i_int16 = -1
i_float = -3.05175781250000e-05
q_int16 = 16383
q_float = 0.499969482421875
hex2dec
将十六进制转换为双精度,所以我将其转换为uint16
,以保留符号位(hex2dec
拒绝这样做)。然后,我将结果typecast
签名为int16
。这只是获取uint16
的位并将其解释为int16
。然后将其转换为single
并进行位移位。注意:我使用
format long
来查看尽可能多的小数位。关于python - 如何在MATLAB中将定点(Q格式)数字转换为浮点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33332466/