La classe BitConverter
può essere utilizzato per questo, e, naturalmente, può essere usato anche su entrambi i sistemi piccoli e grandi endian.
Ovviamente, dovrai tenere traccia dello endianness dei tuoi dati. Per le comunicazioni, ad esempio, questo sarebbe definito nel tuo protocollo.
È quindi possibile utilizzare la classe BitConverter
per convertire un tipo di dati in un array di byte e viceversa, quindi utilizzare il flag IsLittleEndian
per verificare se è necessario convertirlo sul sistema o meno.
La bandiera IsLittleEndian
vi dirà la endianness del sistema, in modo da poter utilizzare nel modo seguente:
Questo è dalla pagina MSDN sulla classe BitConverter
.
int value = 12345678; //your value
//Your value in bytes... in your system's endianness (let's say: little endian)
byte[] bytes = BitConverter.GetBytes(value);
//Then, if we need big endian for our protocol for instance,
//Just check if you need to convert it or not:
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes); //reverse it so we get big endian.
È possibile trovare l'articolo completo here.
Spero che questo aiuti chiunque venendo qui :)
Perché dovrebbe tuo esempio funziona solo su un po ' macchina -endiana?AFAIK il metodo di spostamento del bit dovrebbe essere endnostico-agnostico. – nonoitall
@ John, sono abbastanza sicuro che il codice funzioni bene se il codice gira su un'architettura big o little-endian. In entrambi i casi, b [0] è il byte di ordine più basso, b [1] è il byte dell'ordine successivo più basso e così via. –
Errore mio, poiché questo codice restituisce LE anziché l'ordine di byte naturale della CPU sottostante, funzionerà su tutte le architetture. Rimuoverò il testo errato. –