c# - “Write”语句中的编译器错误将字节值发送到 C#.NET 中的 SerialPort
问题描述
我相信这是一个直截了当的问题,但是在研究了各个地方的错误代码之后,对我来说意义不大。
我想要达到的目标:
- 将列表值数组写入串行端口
怎么了:
下面的语句正在生成错误,“CS0443:语法错误,预期值”错误位于“Write”语句的 serPortXmitBuffer 对象的指针括号内。
mySerialPort.Write (serPortXmitBuffer[], 0, serPortXmitBuffer.Count-1); mySerialPort.Write (serPortXmitBuffer[此处错误], 0, serPortXmitBuffer.Count-1);
“写入”语句在 serPointXmitBuffer 中传递了一个有效名称,我检查了该数组是否存在且正确。对于我的一生,我不知道为什么这个代码片段会为一个值生成错误???数组内容为 11 个字节,如下:255, 255, 2 65, 73, 77, 16, 2 0, 0, 3
我试过的:
- 从第一个传入的名称 serPortXmitBuffer 中删除括号。(这不起作用,因为这样做会导致错误,“CS1503:参数 1:无法从 'System.Collections.Generic.List' 转换为 'char[]'”
- 在 [] 中提供值的不合逻辑的尝试中,我输入了零 (0)。(这也不起作用,因为它也会生成与上面关于将字节转换为字符的完全相同的错误消息
为了完整起见,生成数组的代码如下所示:
int incArrPnter;
Console.WriteLine("Writing passed in xmitBuffer within TXPACK routine");
for (incArrPnter = 0; incArrPnter <= _array.Count-1; incArrPnter = incArrPnter + 1)
{
Console.WriteLine(_array[incArrPnter]);
}
// Declare our new List<byte> array, serPortXmitBuffer
// Copy all bytes in "_array" over to serPortXmitBuffer
List<byte> serPortXmitBuffer = new List<byte>();
// Copy "_array" over to serPortXmitBuffer
for (incArrPnter = 0; incArrPnter <= _array.Count - 1; incArrPnter = incArrPnter + 1)
{
serPortXmitBuffer.Add(_array[incArrPnter]);
}
// Try to write the contents of serPortXmitBuffer to the serial port.
mySerialPort.Write (serPortXmitBuffer[0], 0, serPortXmitBuffer.Count-1);
解决方案
我学到的一些对我来说不一定显而易见的事情(也许其他人可能不知道,所以我发布了这个答案:
尝试从串行端口发送字节时,“Write”方法不支持将列表作为结构。它必须是传统的字节数组,例如 myArray[]
到目前为止,我还没有发现让“myArray.Count-1”成为 Write 语句中的有效元素来表示要传输的字节总数的方法。它必须是一个数字 (int) 或一个 int 变量。
我很想在第二点上犯错,但到目前为止,我读过或看到的任何内容都不允许我传递“myArray.Count”或“myArray.Count - 1”,因为这些表达式都没有解析为 int。
推荐阅读
- r - 自定义图例形状和大小 ggplot2
- swift - 在字典中搜索各种条件 Swift
- python-3.x - 为什么 is_closed 在重写版本中停止工作?
- r - 在 R 中绘制多个纵向轨迹时如何只标记一次?
- python - 继承的类无法访问 Python 中父类的修饰函数的属性
- javascript - 如何使脚本在带有 html 和 java 的程序中工作?
- sql - 使用时间戳间隔加入 SQL
- ruby-on-rails - rails 模型回调 before_validation
- ios - UITableView 上的 iOS didSelectRowAt 行不起作用
- python - KeyError "" 字典中的键未找到