ubytes to ulong problem
ponce
contact at g3mesfrommars.fr
Sat Dec 21 14:29:58 PST 2013
On Saturday, 21 December 2013 at 22:22:09 UTC, Charles Hixson
wrote:
> I was planning to ask if there were a better way to do this,
> but instead I need to ask what's my mistake?
> For some reason, if called with an uninitialized ubyte array,
> and an index of 0, it returns a value of 8, even though all the
> values in the array are 0.
> The error has to be somewhere in the "ret = " statement, but I
> sure don't see it.
>
> /** Convert 8 consecutive bytes sliced from a ubyte[] into a
> ulong
> * @param block The array from which to slice.
> * @param n The starting index within the block */
> ulong ubytesToUlong(ubyte[] block, int n)
> { ulong ret;
> assert (n >= 0);
> assert (n + 8 <= block.length);
> writefln ("n = %s", n);
> writefln ("block[0] = %s", cast(ulong)block[0]);
> writefln ("block[1] = %s", cast(ulong)block[1]);
> writefln ("block[2] = %s", cast(ulong)block[2]);
> writefln ("block[3] = %s", cast(ulong)block[3]);
> writefln ("block[4] = %s", cast(ulong)block[4]);
> writefln ("block[5] = %s", cast(ulong)block[5]);
> writefln ("block[6] = %s", cast(ulong)block[6]);
> writefln ("block[7] = %s", cast(ulong)block[7]);
> ret = cast(ulong)block[n] * 2^21
> + cast(ulong)block[n+1] * 2^18
> + cast(ulong)block[n+2] * 2^15
> + cast(ulong)block[n+3] * 2^12
> + cast(ulong)block[n+4] * 2^9
> + cast(ulong)block[n+5] * 2^6
> + cast(ulong)block[n+6] * 2^3
> + cast(ulong)block[n+7] * 2^0;
> writefln ("ret = %s", ret);
> return ret;
> }
More information about the Digitalmars-d-learn
mailing list