ubyte arrays to numbers
    Regan Heath 
    regan at netmail.co.nz
       
    Tue Apr  8 02:01:13 PDT 2008
    
    
  
lurker wrote:
> do you know of any prefab functions of templates?
> 
> Leandro Lucarella Wrote:
> 
>> lurker, el  7 de abril a las 11:43 me escribiste:
>>> hi,
>>>
>>> is there any good and easy way to convert ubyte arrays to short, ushort, int, uint long and ulong?
>> if the byte order is correct, a cast should do it, if not, htons and htonl
>> should help (for longs, I think you have to roll your own hton).
import std.stdio;
T convert(T)(ubyte[] data)
{
	return *(cast(T*)data[0..T.sizeof].ptr);
}
void main()
{
	writefln(convert!(ubyte) ([ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00 ]));  //2^7  = 128
	writefln(convert!(ushort)([ 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00 ]));  //2^15 = 32768
	writefln(convert!(uint)  ([ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 
0x00 ]));	 //2^31 = 2147483648
	writefln(convert!(ulong) ([ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x80 ]));	 //2^63 = 9223372036854775808
}
** You'll want to un-wrap the array literals if your reader has wrapped 
the lines. :)
Regan
    
    
More information about the Digitalmars-d-learn
mailing list