2011-08-26 3 views
4

Je n'arrive pas à convertir une expression hexadécimale 32 bits en un seul nombre de précision dans Matlab.Convertir un hexadécimal en simple précision

La fonction num2hex fonctionne correctement pour les deux. Par exemple,

 
>> b = 0.4 

b = 

    0.400000000000000 

>> class(b) 

ans = 

double 

>> num2hex(b) 

ans = 

3fd999999999999a 

>> num2hex(single(b)) 

ans = 

3ecccccd 

Cependant, cela ne fonctionne pas dans l'autre sens. La fonction seule convertit l'expression hexadécimale en doubles. Ainsi,

 
>> b = 0.4 

b = 

    0.400000000000000 

>> num2hex(single(b)) 

ans = 

3ecccccd 

>> hex2num(ans) 

ans = 

    3.433227902860381e-006 

Matlab pads simplement des zéros pour en faire un hex 64 bits. Existe-t-il un moyen d'effectuer cette conversion?

+1

pour la conversion avant (NUM2HEX), vous pouvez également utiliser fprintf/sprintf: 'sprintf ('% bx', b)' et 'sprintf ('% tx', seul (b)) ' – Amro

+0

question similaire: [conversion 32 bits hexadécimal à 32 bits virgule flottante (IEEE 754) dans Matlab] (http://stackoverflow.com/questions/52327 26/32-bit-hex-à-32-bit-virgule flottante-ieee-754-conversion-en-matlab) – Amro

Répondre

10

Il y a une façon que je trouve à faire usign construit dans les fonctions de Matlab

%#Let's convert 0x40100000 to Single Precision Float (should equal 2.25) 

tempHex = '40100000'; 

tempVal = uint32(hex2dec(tempHex)); 

tempFloat = typecast(tempVal,'single') 
%#result is 2.25 
+0

Ceci est la meilleure réponse car elle fournit la fonctionnalité exacte souhaitée – Veridian

+0

si 'hex2num' n'était pas disponible,' typecast (uint64 (hex2dec ('400921fb54442d18')), 'double') 'fonctionne –

Questions connexes