2013-08-01 4 views
0

привет У меня есть текстовые поля, в которые пользователь вводит информацию, такую ​​как имя, фамилия, .... Мне нужно преобразовать текст текстовых полей в шестнадцатеричный, а затем преобразовать шестнадцатеричный код в байты и отправить на устройство через rs232.Текстовое поле с шестнадцатеричным байтом

Я знаю отправку через часть rs232. Мой вопрос: могу ли я использовать только textbox.text.ToString("X") и после этого использовать следующую функцию для преобразования массива hex в байты?

public static byte[] StringToByteArray(String hex) 
{ 
    int NumberChars = hex.Length; 
    byte[] bytes = new byte[NumberChars/2]; 
    for (int i = 0; i < NumberChars; i += 2) 
    bytes[i/2] = Convert.ToByte(hex.Substring(i, 2), 16); 
    return bytes; 
} 
+0

Редактировать ваш вопрос включить это: * С учетом ____, я ожидаю, ____ *. –

+0

Я прочитал эту статью, но не могу понять, как использовать их для преобразования строки в шестнадцатеричный. это то, что я хочу сделать: если имя «Джон», например, я хочу отправить «6A6F686E». – user2628363

+0

6A для нижнего регистра j, кстати, J, как в «Джоне», является 4A –

ответ

1

Предполагая, что ASCII (основано на ваш комментарий):

var bytes = textbox.Text 
        .Select(c => (byte)c) // cast every character to a byte 
        .ToArray(); 

Там нет необходимости конвертировать в шестнадцатеричную, когда вы думаете о chars как набор битов.

Для того, чтобы «Джон» в «6A6F686E» в байтах (по-прежнему кажется странным, чтобы удвоить данные послана ...):

var bytes = textbox.Text 
        .Select(c => (byte)c) // to byte 
        .SelectMany(b => b.ToString("X")) // to hex 
        .Select(c => (byte)c) // to "hex-byte" 
        .ToArray(); 
+0

OK. Таким образом, я предполагаю, что мне не нужно объявлять 'byte [] ba = new byte()', а 'var bytes' принимает все символы, несмотря на длину' textbox.text'? – user2628363

+0

@ user2628363: Никаких других объявлений не требуется, и это создаст массив, представляющий все символы в текстовом поле. Если вам нужно меньше символов, добавьте '.Take (numberOfChars)' перед вызовом '.ToArray()'. –

+0

Спасибо Это работает, но байтовые значения десятичные Я хочу, чтобы они были hex.I означает, что для 'h' он дает мне 104, но я хочу 68 – user2628363

Смежные вопросы