Assumed your program runs on an Intel processor, the integer format is little-endian, which means the least significant byte comes first. So 0x20636261
is actually stored in memory as
0x61 0x62 0x63 0x20
which means Marshal.Copy
did not change the byte order, you just misunderstood the correct order for how to decode the integer value into a sequence of bytes.