1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| double readIEEE64(unsigned char data[8])
{
unsigned long long tmp = static_cast<unsigned long long>(data[0]) << 56;
tmp |= static_cast<unsigned long long>(data[1]) << 48;
tmp |= static_cast<unsigned long long>(data[2]) << 40;
tmp |= static_cast<unsigned long long>(data[3]) << 32;
tmp |= static_cast<unsigned long long>(data[4]) << 24;
tmp |= static_cast<unsigned long long>(data[5]) << 16;
tmp |= static_cast<unsigned long long>(data[6]) << 8;
tmp |= static_cast<unsigned long long>(data[7]);
double result = 0.0;
if ((tmp & 0x7FFFFFFFFFFFFFFF) != 0)
{
result = ldexp(static_cast<double>((tmp & 0x000FFFFFFFFFFFFF) | 0x0010000000000000),
static_cast<int>((tmp & 0x7FF0000000000000) >> 52) - 1022 - 53);
}
if ((tmp & 0x8000000000000000) != 0)
{
result = -result;
}
return result;
} |
Partager