Pergunta

Estou tentando converter um valor int em um tipo de char não assinado de 16 bits (ushort). Em um exemplo, o 41104 é A909 em Ushort, mas em C# eu tentei com a amostra de código como (com a ajuda do artigo do MSDN Bitconverter.getbytes yöntem (uint16)):

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

Como obtenho o valor A909 como Ushort para 41104?

Foi útil?

Solução

Na verdade, o valor correto (= hexadecimal) é A090. Não importa se é ou não, o que você quer é exibir o equivalente hexadecimal.

O snippet de código que você já forneceu já faz isso. Um byte é "a0" o outro "90". Você só precisa acertar o pedido.

Outra maneira é deixar o .net fazer o trabalho

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

Como você pode ver, não é realmente uma conversão de dados, mas uma maneira diferente de exibição.

Outras dicas

Você precisa reordenar os bytes:

byte[] bytes = BitConverter.GetBytes(41104);
if (BitConverter.IsLittleEndian)
{    List<byte> tmp = new List<byte>();
     tmp.AddRange(bytes);
     tmp.Reverse();
     bytes = tmp.ToArray();
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top