使用特定格式将字节数组发送到串行端口
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);
}
这里有点奇怪,但我正在尝试为监视器编写一个控制程序,该监视器使用串行 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);
}