Отправка байтового массива на последовательный порт с использованием определенного форматирования - PullRequest
1 голос
/ 08 января 2020

Немного странно, но я пытаюсь написать управляющую программу для монитора, использующего последовательный порт RS232 для получения команд в шестнадцатеричном, 0xFF, нотации, т. Е. 0x00.

Проблема у меня есть что я не могу найти способ взять пользовательский ввод, который является десятичным значением, например, 55, и преобразовать его в его байтовую, шестнадцатеричную форму с вышеупомянутым форматом. Использование метода Convert, встроенного в Visual Studio, дает мне правильное значение, которое мне нужно, но без требуемого 0x в начале.

Я новичок в использовании байтов и байтовых массивов в C#, так что извините, если Я упустил простой метод форматирования, который решит его.

Ниже приведен метод массива строк в байтах, который я нашел здесь, и он полезен, но дает мне неправильный формат для байтов.

private 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, 2), 16);
            return bytes;
        }

Ответы [ 2 ]

1 голос
/ 08 января 2020

Вы можете просто преобразовать шестнадцатеричную строку в байты. См. Как преобразовать байтовый массив в шестнадцатеричную строку и наоборот?

простое преобразование одного "шестнадцатеричного байта" и отправка байта:

MonPort.Write(Convert.ToByte("A6"), 0,1);

Преобразование содержимого вашего текстового поля в двоичный массив и отправка его:

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;
}


public void SendData()
{
    byte[] sendBytes = StringToByteArray(YourSendBytesTextbox.Text);
    MonPort.Write(sendBytes, 0, sendBytes.Length);
}
0 голосов
/ 08 января 2020

См. Следующее:

            string input = "abcdefghijk";
            byte[] data = string.Join(",",input.AsEnumerable()
                .Select(x => "0x" + ((byte)x).ToString("X2")))
                .Select(x => (byte)x).ToArray();
            string str = Encoding.UTF8.GetString(data);
...