Hex to float like python struct.unpack()
40 次查看(过去 30 天)
显示 更早的评论
Hi
I'm trying to convert a hex string to a float in the same manner python function struct.unpack(), https://docs.python.org/3/library/struct.html , which is using the IEEE754 binary32 0r 64 depending on foat or double.
As an example I have
hex = 'C956F53D'
When i run it in a struct.unpack() i get the value:
data = 0.1198
And this is correct. However, when i try the following matlab function i get something totally different.
>> hex2dec(hex)
ans =
3.3779e+09
>> typecast(uint32(hex2dec(hex)),'single')
ans =
single
-8.8047e+05
Does anybody know the difference or what I'm doing wrong?
Thanks!
0 个评论
采纳的回答
Ameer Hamza
2020-9-16
This is the correct way
hex = 'C956F53D';
x = hex2dec(reshape(hex, 2, []).');
dec = typecast(uint8(x), 'single')
2 个评论
Ameer Hamza
2020-9-16
编辑:Ameer Hamza
2020-9-16
Yes, you need to convert it into an uint8 array. Then MATLAB reads the bytes from the input array and converts those bytes into 'single'. It is pretty similar to pointer typecasting in C.
I am glad to be of help!
更多回答(1 个)
James Tursa
2020-9-16
Could be a Big Endian vs Little Endian thing. E.g., inserting a swapbytes( ) step:
>> hex = 'C956F53D'
hex =
'C956F53D'
>> typecast(swapbytes(uint32(hex2dec(hex))),'single')
ans =
single
0.1198
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!