Convert 8 byte array to double [message #94015] |
Wed, 21 December 2016 02:25  |
LNpellen
Messages: 37 Registered: November 2009
|
Member |
|
|
I'm working with DICOM files where a floating number is saved as BYTE array[8] and I know (at least pretty sure) it is a double precision floating number, but I cannot figure out how to convert it to DOUBLE.
IDL> help, a
A BYTE = Array[8]
IDL> print, a
51 51 51 51 51 51 227 63
IDL> print, string(a)
333333ã?
IDL> print, string(a, format='(Z)')
33 33 33 33 33 33 E3 3F
IDL> print, double(a)
51.000000 51.000000 51.000000 51.000000 51.000000 51.000000 227.00000 63.000000
I understand that I can calculate it myself, but that will require a whole lot of code and quite some reading to understand howto. Anybody know of an easier way? As DOUBLE really is a 64bit number...
I have also a feeling that this is swapped endian, or what it is called. (3F first, 33 last).
|
|
|
Re: Convert 8 byte array to double [message #94016 is a reply to message #94015] |
Wed, 21 December 2016 02:47   |
Heinz Stege
Messages: 189 Registered: January 2003
|
Senior Member |
|
|
Try:
a=[51b,51b,51b,51b,51b,51b,227b,63b]
print,float(a,0,1)
or if swapped:
print,float(reverse(a),0,1)
HTH, Heinz
|
|
|
Re: Convert 8 byte array to double [message #94017 is a reply to message #94016] |
Wed, 21 December 2016 03:19  |
Heinz Stege
Messages: 189 Registered: January 2003
|
Senior Member |
|
|
One more thought: Of course you have to use double instead of float.
If you are expecting 0.6 as the result, the given number is little
endian. This can be considered in by:
litle_endian=byte(1s,0,1)
print,double(litle_endian? a : reverse(a),0,1)
Cheers, Heinz
|
|
|