¿Cómo obtener datos de Ushort en C#, A909 para 41104?
-
26-09-2019 - |
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?
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();
}