使用特定格式将字节数组发送到串行端口

Sending a byte array to a serial port using certain formatting

这里有点奇怪,但我正在尝试为监视器编写一个控制程序,该监视器使用串行 RS232 端口接收十六进制命令,0xFF,符号,即 0x00。

我遇到的问题是,我似乎无法找到一种方法来获取用户输入(如 55 之类的十进制值)并将其转换为具有上述格式的字节、十六进制形式。使用 Visual studio 内置的 Convert 方法为我提供了我需要的正确值,但开头没有所需的 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;
        }

见下文:

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

您可能只想将十六进制字符串转换为字节。请参阅 如何将字节数组转换为十六进制字符串,反之亦然?

简单转换一个"hex-string-byte"并发送字节:

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