[XSLT] Transformation numérique
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 :
Code:
1 2 3
| ...
<CDV TPE="DSC" VAL="3FFA6009F2BF9C72" />
... |
devient
Code:
1 2 3
| ...
<CDV TPE="DSC" VAL="1.64844698737741" />
... |
Pour info j'ai le code java
Code:
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;
} |
C++
Code:
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;
} |
et même en perl
Code:
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;
} |