Thread overview
ubyte arrays to numbers
Apr 07, 2008
lurker
Apr 07, 2008
Leandro Lucarella
Apr 07, 2008
lurker
Apr 08, 2008
Regan Heath
Apr 08, 2008
lurker
April 07, 2008
hi,

is there any good and easy way to convert ubyte arrays to short, ushort, int, uint long and ulong?

thanks

lurker
April 07, 2008
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).

-- 
Leandro Lucarella (luca) | Blog colectivo: http://www.mazziblog.com.ar/blog/
----------------------------------------------------------------------------
GPG Key: 5F5A8D05 (F8CD F9A7 BF00 5431 4145  104C 949E BFB6 5F5A 8D05)
----------------------------------------------------------------------------
SATANAS EN COMISARIA
	-- Crónica TV
April 07, 2008
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).
> 
> -- 
> Leandro Lucarella (luca) | Blog colectivo: http://www.mazziblog.com.ar/blog/
> ----------------------------------------------------------------------------
> GPG Key: 5F5A8D05 (F8CD F9A7 BF00 5431 4145  104C 949E BFB6 5F5A 8D05)
> ----------------------------------------------------------------------------
> SATANAS EN COMISARIA
> 	-- Crónica TV

April 08, 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
April 08, 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