ubyte arrays to numbers

lurker lurker at lurker.com
Tue Apr 8 12:51:55 PDT 2008


thank you so much

Regan Heath Wrote:

> 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