首页 > 解决方案 > 使用特定格式将字节数组发送到串行端口

问题描述

这里有点奇怪,但我正在尝试为使用串行 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;
        }

标签: c#serial-portbyte

解决方案


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

一个“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);
}

推荐阅读