2016-01-05 7 views
0

Je lis des valeurs provenant de capteurs et je reçois deux valeurs hexadécimales 16 bits dans le format de chaîne "417D" et "8380" par exemple.Passage d'une chaîne hexadécimale dans une propriété textbox.text à BitConverter.GetBytes comme hexadécimal dans C#

Je n'arrive pas à trouver un moyen en C# d'analyser les chaînes pour les diviser en un tableau d'octets (41,7D, 83,80) en préservant le nombre hexadécimal. Puis j'utilise ce qui suit pour convertir le nombre IEEE754 en nombre décimal pour obtenir la valeur de lecture de capteur correcte.

txtFloatValue.Text = BitConverter.ToSingle(hex, 0).ToString();

Le code ci-dessous fonctionne, mais je dois transmettre les valeurs comme un tableau hexagonal, non 0x417D8380.

byte[] hex = BitConverter.GetBytes(0x417D8380); 
txtFloatValue.Text = BitConverter.ToSingle(hex, 0).ToString(); 

Un conseil serait grandement apprécié. Je peux être approcher de la mauvaise façon, mais la conversion IEEE754 fonctionne bien.

+0

Pas tout à fait sûr de ce que vous commencez avec et où vous essayez d'aller, mais vous pouvez analyser une chaîne hexagonale avec 'int.Parse (« 417D », NumberStyles.AllowHexSpecifier)' Vous pouvez puis utilisez 'GetBytes' et' BitConverter' comme dans votre second extrait de code. –

+1

Hexadécimal est une ** représentation **. Que voulez-vous dire par "préserver le nombre hexadécimal"? Quelle est exactement votre question? _ "Comment convertir deux chaînes hexadécimales en un' single '"? – CodeCaster

Répondre

1

Vous pouvez analyser vos chaînes hexadécimales en entiers, puis utiliser BitConverter. Par exemple:

var i = int.Parse("417D8380", NumberStyles.AllowHexSpecifier); 
var bytes = BitConverter.GetBytes(i); 
var single = BitConverter.ToSingle(bytes, 0); // 15.8446 
+1

Refusée. La première ligne peut aussi être écrite 'var i = Convert.ToInt32 (" 417D8380 ", fromBase: 16);' –

+1

Lors de la concaténation de "417D" 'et' "8380" ', il faut être conscient de l'endianness, je suppose. –

+0

@JeppeStigNielsen: Absolument. Vous pouvez vérifier [BitConverter.IsLittleEndian] (https://msdn.microsoft.com/en-us/library/system.bitconverter.islittleendian (v = vs.110) .aspx). –