在C#中将大数转换为两个字节

3
我试图将文本框中的数字转换为可以通过串行发送的2个字节。这些数字的范围从500到-500。我已经设置好了,可以简单地发送一个字符串,然后将其转换为字节。以下是一个例子:
send_serial("137", "1", "244", "128", "0")
文本框中的数字将放在第二和第三个字节中。
这将使我的Roomba(所有这些代码的机器人)以500毫米/秒的速度向前行驶。第一个发送的数字告诉Roomba行驶,第二和第三个数字是速度,第四和第五个数字是转弯半径(介于2000和-2000之间,还有特殊情况,32768为直行)。

你用什么语言编写代码? - Bobby
我认为OP已经在标题中提到了:C#。 - Tu Tran
你可以给Roomba编程吗?我很好奇... 你让它做什么? - Adam Porad
通过使用串行和Roomba上的SCI端口制作一个C#程序,我们可以让它驱动并打开刷子、吸尘刀片和风扇。 - LAK132
我们想把它变成类似于turtlebot的东西。 - LAK132
如果您需要,我很高兴向您展示控制Roomba的代码。 - LAK132
2个回答

2
var value = "321";
var shortNumber = Convert.ToInt16(value);
var bytes = BitConverter.GetBytes(shortNumber);

如果您需要大端序:

var bigEndianBytes = new[]
{
    (byte) (shortNumber >> 8), 
    (byte) (shortNumber & byte.MaxValue)
};

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?
}

这里我假设你的“byte”值从0到255,与C#的byte类型相同。我使用byte.TryParse方法将string解析为byte


我可能误解了问题的某些部分,因此我正在重写答案。 - Alvin Wong
我已经编写了一些代码,只需解析字符串,然后将其转换为可以通过串行发送的数字。 - LAK132
我必须解析一个包含0到255之间数字的字符串,所以你是正确的。 - LAK132

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接