Domanda

Sto cercando di convertire un valore int a un tipo char senza segno a 16 bit (USHORT). In un esempio, 41104 è A909 in ushort, ma in C # Ho provato con codice di esempio come (con l'aiuto di articolo di MSDN BitConverter.GetBytes Yöntem (UInt16) ):

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

Come faccio ad avere il valore A909 come ushort per 41104?

È stato utile?

Soluzione

In realtà il valore corretto (= esadecimale) è A090. Non ha importanza che si tratti di ushort o no, ciò che si vuole è quello di visualizzare l'equivalente esadecimale.

il frammento di codice che hai fornito già fa questo. Un byte è "A0" l'altro "90". Devi solo per ottenere il giusto ordine.

Un altro modo è quello di lasciare che .NET fare il lavoro

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

Come si può vedere non è proprio una conversione di dati, ma piuttosto un modo diverso di visualizzazione.

Altri suggerimenti

È necessario riordinare i byte:

byte[] bytes = BitConverter.GetBytes(41104);
if (BitConverter.IsLittleEndian)
{    List<byte> tmp = new List<byte>();
     tmp.AddRange(bytes);
     tmp.Reverse();
     bytes = tmp.ToArray();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top