c# - 使用特定格式将字节数组发送到串行端口
问题描述
这里有点奇怪,但我正在尝试为使用串行 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;
}
解决方案
您可能只想将十六进制字符串转换为字节。请参阅如何将字节数组转换为十六进制字符串,反之亦然?
一个“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);
}
推荐阅读
- next.js - 为什么不应用 JSX CSS?
- node.js - 节点模块是针对节点模块 v 72 编译的。需要 v 64
- splunk - 如何将文本行分成多个事件
- python-3.x - log1pexp 在 Tensorflow 中不可用?
- c# - C#。如果“等待之后”线程很忙,会发生什么?
- c++ - 使用 OIIO 时架构 x86_64 的未定义符号
- shell - 日期命令额外操作数和脚本上的“(”意外
- typescript - 结合使用时键入 union 和 intersection
- javascript - React 中复选框总和的组件
- haskell - 如何使 System.Process 表现得像在终端中一样