Search code examples
c#arraysuint32

How do I convert byte array to UInt32 array?


Lets say In C++ I got code like this..

void * target
uint32 * decPacket = (uint32 *)target;

So in C# it would be like..

byte[] target;
UInt32[] decPacket = (UInt32[])target;

Cannot convert type byte[] to uint[]

How do I convert this memory aligning thing C++ does to arrays to C#?


Solution

  • Well, something close would be to use Buffer.BlockCopy:

    uint[] decoded = new uint[target.Length / 4];
    Buffer.BlockCopy(target, 0, decoded, 0, target.Length);
    

    Note that the final argument to BlockCopy is always the number of bytes to copy, regardless of the types you're copying.

    You can't just treat a byte array as a uint array in C# (at least not in safe code; I don't know about in unsafe code) - but Buffer.BlockCopy will splat the contents of the byte array into the uint array... leaving the results to be determined based on the endianness of the system. Personally I'm not a fan of this approach - it leaves the code rather prone to errors when you move to a system with a different memory layout. I prefer to be explicit in my protocol. Hopefully it'll help you in this case though.