2010-09-02 9 views
2

J'essaie de convertir une valeur int en un type de caractère non signé de 16 bits (USHORT). Dans un exemple, 41104 est A909 à ushort, mais en C# J'ai essayé avec exemple de code comme (avec l'aide de MSDN article BitConverter.GetBytes Yöntem (UInt16)):Comment obtenir des données d'ushort en C#, A909 pour 41104?

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

Comment puis-je obtenir la valeur de A909 comme ushort pour 41104?

Répondre

2

En fait, la valeur correcte (= hexadécimale) est A090. Je n'a pas d'importance si c'est ushort ou pas, ce que vous voulez est d'afficher l'équivalent hexadécimal.

L'extrait de code que vous avez déjà fourni le fait. Un octet est "A0" l'autre "90". Vous devez juste obtenir la commande correcte.

Une autre façon est de laisser faire le travail .NET

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

Comme vous pouvez le voir, c'est pas vraiment une conversion de données, mais plutôt d'une manière différente de l'affichage.

+0

également certaines valeurs doivent convertir en ULONG, certaines valeurs doivent convertir USHORT et Somes devraient se convertir à SHORT type de données comment convertir ces types ?? thnx – dankyy1

+1

i « m googling et trouvé que la conversion était ... string.Format ("{0: X16}", 41104) pour ushort string.Format ("{0: X32}", 41104) pour ulong string.Format ("{0: X8}", 41104) pour l'octet peut être utilisé – dankyy1

+1

Aussi, 'Convert.ToString (, 16)'. –

1

Vous devez réorganiser les octets:

byte[] bytes = BitConverter.GetBytes(41104); 
if (BitConverter.IsLittleEndian) 
{ List<byte> tmp = new List<byte>(); 
    tmp.AddRange(bytes); 
    tmp.Reverse(); 
    bytes = tmp.ToArray(); 
} 
+0

thnx pour votre réponse .dans l'exemple de code ci-dessus() est oublié après tmp est défini de sorte que le bloc de code doit être comme sur la 3ème ligne Liste tmp = nouvelle Liste (); – dankyy1

Questions connexes