Pregunta

Estoy tratando de convertir un valor INT en un tipo de char sin firmar de 16 bits (Ushort). En un ejemplo, 41104 es A909 en Ushort, pero en C# probé con la muestra de código como (con la ayuda del artículo de MSDN BitConverter.getBytes yöntem (uint16)):

byte[] bytes = BitConverter.GetBytes(41104);
string bytes = BitConverter.ToString(byteArray);
//It returns "90-A0"

¿Cómo obtengo el valor A909 como USHort para 41104?

¿Fue útil?

Solución

En realidad, el valor correcto (= hexadecimal) es A090. No importa si es USHort o no, lo que quieres es mostrar el equivalente hexadecimal.

El fragmento de código que proporcionó ya hace esto. Un byte es "a0" el otro "90". Solo tienes que hacer el pedido correcto.

Otra forma es dejar que .net haga el trabajo

String.Format("{0:X}", 41104);

Como puede ver, no es realmente una conversión de datos, sino una forma diferente de visualización.

Otros consejos

Necesitas reordenar los bytes:

byte[] bytes = BitConverter.GetBytes(41104);
if (BitConverter.IsLittleEndian)
{    List<byte> tmp = new List<byte>();
     tmp.AddRange(bytes);
     tmp.Reverse();
     bytes = tmp.ToArray();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top