我正在尝试将文本框中的数字转换为2个字节,然后可以通过串行发送。数字范围从500到-500。我已经有一个设置,所以我可以简单地发送一个字符串,然后转换为一个字节。这是一个例子:
send_serial(“137”,“1”,“244”,“128”,“0”)
文本框编号将位于第2和第3个字节
这将使我的Roomba(所有这些代码所用的机器人)以500 mm / s的速度向前行驶。发送的第一个数字告诉roomba开车,第二个和第三个数字是速度,第四个和第五个数字是转弯的半径(在2000和-2000之间,也有一个特殊情况,其中32768是直的)。
答案 0 :(得分:2)
var value = "321";
var shortNumber = Convert.ToInt16(value);
var bytes = BitConverter.GetBytes(shortNumber);
或者,如果您需要Big-Endian订购:
var bigEndianBytes = new[]
{
(byte) (shortNumber >> 8),
(byte) (shortNumber & byte.MaxValue)
};
答案 1 :(得分:0)
假设您使用的是System.IO.Ports.SerialPort
,您将使用SerialPort.Write(byte[], int, int)
来发送数据。
如果您的输入是这样的:99,255
,您将这样做以提取两个字节:
// Split the string into two parts
string[] strings = textBox1.text.Split(',');
byte byte1, byte2;
// Make sure it has only two parts,
// and parse the string into a byte, safely
if (strings.Length == 2
&& byte.TryParse(strings[0], System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out byte1)
&& byte.TryParse(strings[1], System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out byte2))
{
// Form the bytes to send
byte[] bytes_to_send = new byte[] { 137, byte1, byte2, 128, 0 };
// Writes the data to the serial port.
serialPort1.Write(bytes_to_send, 0, bytes_to_send.Length);
}
else
{
// Show some kind of error message?
}
这里我假设你的“字节”是0到255,这与C#的byte
类型相同。我使用byte.TryParse
将string
解析为byte
。