Hex to float like python struct.unpack()
40 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Sebastian Thuné
il 16 Set 2020
Risposto: James Tursa
il 16 Set 2020
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 Commenti
Risposta accettata
Ameer Hamza
il 16 Set 2020
This is the correct way
hex = 'C956F53D';
x = hex2dec(reshape(hex, 2, []).');
dec = typecast(uint8(x), 'single')
2 Commenti
Ameer Hamza
il 16 Set 2020
Modificato: Ameer Hamza
il 16 Set 2020
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!
Più risposte (1)
James Tursa
il 16 Set 2020
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 Commenti
Vedere anche
Categorie
Scopri di più su Logical in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!