Avatar billede clinton-2 Nybegynder
08. oktober 2008 - 16:30 Der er 2 kommentarer og
1 løsning

Endian - Struct to byte array

Følgende kode konveretere en struct til et byte array.

private unsafe byte[] StructureToByteArray(object obj)
{
  int rawsize = Marshal.SizeOf(obj);
  byte[] arr = new byte[rawsize];
  GCHandle handle = GCHandle.Alloc(arr, GCHandleType.Pinned);
  Marshal.StructureToPtr(obj, handle.AddrOfPinnedObject(), false);
  handle.Free();
  return arr;
}

Problemet er at hvis structen indeholder f.eks en integer på 0x12, så ønsker jeg den skrevet 0x00000012 og ikke 0x12000000 som eksemplet gør.
Avatar billede arne_v Ekspert
08. oktober 2008 - 16:40 #1
Den returnerer ikke 0x12000000 men derimod 0x12 0x00 0x00 0x00, hvilket er hvad
Marshal.StructureToPtr vil goere paa en little endian maskine, fordi den
ikke flytter om paa data men laver en raa kopi af data.

Hvis du vil have bytes som big endian bliver du noedt til at skrive en konvertering
for hver enkelt struct.
Avatar billede clinton-2 Nybegynder
08. oktober 2008 - 17:09 #2
Smid et svar så får du point.
Avatar billede arne_v Ekspert
08. oktober 2008 - 18:38 #3
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester