2016-01-05 11 views
0

Я читаю значения от датчиков и получаю два 16-разрядных значения Hex в строковых форматах «417D» и «8380», например.Передача шестнадцатеричной строки в свойстве textbox.text в BitConverter.GetBytes как hex в C#

Я не могу найти способ в C# для анализа строк, чтобы разбить их на байтовый массив (41,7D, 83,80), сохранив шестнадцатеричное число.

Затем для преобразования значения IEEE754 в десятичное число используется следующее значение, чтобы получить правильное значение считывания датчика.

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

ниже код работает, но мне нужно, чтобы передать данные в виде шестигранной массива, а не 0x417D8380.

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

Любой совет будет очень благодарен. Возможно, я ошибаюсь, но преобразование IEEE754 работает хорошо.

+0

Не совсем уверен, что вы начинаете с и где вы пытаетесь идти, но вы можете разобрать шестнадцатеричной строки с 'int.Parse («417D», NumberStyles.AllowHexSpecifier);' Вы можете затем используйте 'GetBytes' и' BitConverter', как в вашем втором фрагменте кода. –

+1

Шестнадцатеричный - это ** представление **. Что вы подразумеваете под «сохранением шестнадцатеричного числа»? Какой _exactly_ ваш вопрос? _ «Как преобразовать две шестнадцатеричные строки в' single'? _? – CodeCaster

ответ

1

Вы можете разобрать шестнадцатеричные строки в ints, а затем использовать BitConverter. Например:

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

Приобретено. Первая строка также может быть написана «var i = Convert.ToInt32 (« 417D8380 », fromBase: 16);' –

+1

При конкатенации '' 417D'' и '' 8380 '', я должен подозревать о контенте. –

+0

@ JeppeStigNielsen: Абсолютно. Вы можете проверить [BitConverter.IsLittleEndian] (https://msdn.microsoft.com/en-us/library/system.bitconverter.islittleendian (v = vs.110) .aspx). –