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
13 public 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
14 void 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
12 sub 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; }
Partager