La clase BitConverter
se puede utilizar para esto, y por supuesto, también se puede utilizar en ambos sistemas endian pequeño y grande.
Por supuesto, tendrá que realizar un seguimiento del endianness de sus datos. Para las comunicaciones, por ejemplo, esto se definiría en su protocolo.
Puede utilizar la clase BitConverter
para convertir un tipo de datos en una matriz de bytes y viceversa, y luego usar la bandera IsLittleEndian
para ver si necesita convertirla en su sistema o no.
La bandera IsLittleEndian
le indicará el orden de bits del sistema, por lo que se puede utilizar de la siguiente manera:
Esto es de la página de MSDN en la clase 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.
Puede encontrar el artículo completo here.
Esperanza esto ayuda a cualquiera que venga aquí :)
¿Por qué tu ejemplo único trabajo en una pequeña ¿Máquina india?AFAIK el método de cambio de bit debe ser endian-agnóstico. – nonoitall
@John, estoy bastante seguro de que tu código funciona bien si el código se ejecuta en una arquitectura grande o poco endian. En cualquier caso, b [0] es el byte de orden más bajo, b [1] es el siguiente byte de orden más bajo, y así sucesivamente. –
Mi error, ya que este código devuelve LE en lugar del orden natural de bytes de la CPU subyacente, funcionará en todas las arquitecturas. Eliminaré el texto incorrecto. –