Domanda

BitConverter.ToUInt16 () si aspetta che i byte vengano invertiti, immagino sia così che vengono archiviati in memoria. Ma come posso convertirlo quando non è invertito, senza modificare l'array?

Byte[] ba = { 0, 0, 0, 6, 0, 0 };
BitConverter.ToUInt16(ba, 2); // is 1536/0x0600, but I want 6/0x0006
È stato utile?

Soluzione

Sembra che tu voglia il mio EndianBitConverter in MiscUtil , che consente di specificare se si desidera utilizzare l'endianness grande o piccola.

Fondamentalmente fornisce le stesse funzionalità di BitConverter ma come metodi di istanza. Quindi ottieni il tipo appropriato di EndianBitConverter e fai quello che vuoi con esso.

(Fornisce un po 'più di funzionalità per lavorare in modo efficiente con gli array, il che può essere utile o meno per te.)

La libreria è open source con una licenza abbastanza permissiva.

Altri suggerimenti

Puoi anche usare IPAddress.HostToNetworkOrder.

Penso che la tua migliore chiamata sarebbe quella di invertire l'array con il metodo Array.Reverse.

http: // msdn. microsoft.com/en-us/library/system.array.reverse(VS.71).aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top