convert ubyte[k..k + 1] to int
    Jonathan M Davis 
    jmdavisProg at gmx.com
       
    Wed May 16 11:47:44 PDT 2012
    
    
  
On Wednesday, May 16, 2012 17:03:44 Regan Heath wrote:
> On Wed, 16 May 2012 15:24:33 +0100, ref2401 <refactor24 at gmail.com> wrote:
> > i have an array of ubytes. how can i convert two adjacent ubytes from
> > the array to an integer?
> > 
> > pseudocode example:
> > ubyte[5] array = createArray();
> > int value = array[2..3];
> > 
> > is there any 'memcpy' method or something else to do this?
> 
> You don't need to "copy" the data, just tell the compiler to "pretend"
> it's a short (in this case, for 2 bytes) then copy the value/assign to an
> int. e.g.
> 
> import std.stdio;
> 
> void main()
> {
> ubyte[5] array = [ 0xFF, 0xFF, 0x01, 0x00, 0xFF ];
> int value = *cast(short*)array[2..3].ptr;
> writefln("Result = %s", value);
> }
> 
> The line:
> int value = *cast(short*)array[2..3].ptr;
> 
> 1. slices 2 bytes from the array.
> 2. obtains the ptr to them
> 3. casts the ptr to short*
> 4. copies the value pointed at by the short* ptr to an int
> 
> You may need to worry about little/big endian issues, see:
> http://en.wikipedia.org/wiki/Endianness
> 
> The above code outputs "Result = 1" on my little-endian x86 desktop
> machine but would output "Result = 256" on a big-endian machine.
As long as you're going from big endian to little endian, 
std.bitmanip.bigEndianToNative will do the conversion fairly easily, but if 
they're in little endian, then the nasty casting is the way to go.
- Jonathan M Davis
    
    
More information about the Digitalmars-d-learn
mailing list