Bonjour,
Mon objectif est de rendre plus lisible des fichier XML contenant des numériques au format binaire IEEE754.
Ce format qui a l'avantage d'être totalement insensible à la sérialisation,
a le désavantage d'être totalement illisible.
J'ai donc en entrée du XML contenant, en autres, des numériques au format binaire IEEE754
et je voudrais, en sortie, le même XML avec des numériques au format décimal.
ex :
devient
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3... <CDV TPE="DSC" VAL="3FFA6009F2BF9C72" /> ...
Pour info j'ai le code java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3... <CDV TPE="DSC" VAL="1.64844698737741" /> ...
C++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13public static double hexStringToDouble(String hexString) { long myvalue=0; for(int i=0; i<hexString.length(); i++) { char c = hexString.charAt(i); long v = Character.getNumericValue(c); myvalue = (myvalue << 4); myvalue = myvalue + v ; } double d = Double.longBitsToDouble(myvalue); return d; }
et même en perl
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14void DoubleHexaConverter::convertFrom(double& dval,const char *buf) { double d=0.0; char *dptr=(char *)&d; for(int i=0;i<8;i++) { short u1=(FR_ASCII(buf[15 - 2*i])&0x0F); short u2=FR_ASCII(buf[15 - (2*i + 1)])<<4; char oct=(u1 & 0x000F ) | (u2& 0x00F0); dptr[i]= oct; } dval=d; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12sub toDecimal { # $_[0] => value my $res = $_[0]; if (isHexa($_[0])) { if ($_[0] eq "0000000000000000") { $res = 0; } else { $res = unpack "d", reverse pack "H*", $_[0] ; } } return $res; }








Répondre avec citation


Partager