C# 我可以使用SerialPort.Write发送字节数组吗

C# 我可以使用SerialPort.Write发送字节数组吗,c#,serial-port,C#,Serial Port,SerialPortWrite的文档说明 默认情况下,SerialPort使用AscienceODing对字符进行编码。 AscienceODing将大于127的所有字符编码为(字符)63或 '?'. 要支持该范围内的其他字符,请将“编码”设置为 UTF8编码、UTF32编码或Unicode编码 另见。这是否意味着我无法使用write发送字节数组 默认情况下,SerialPort使用AscienceODing对字符进行编码 您将读/写字符串s或字符s的方法与读/写字节的方法混淆了 例如,当您将其

SerialPort
Write
的文档说明

默认情况下,SerialPort使用AscienceODing对字符进行编码。 AscienceODing将大于127的所有字符编码为(字符)63或 '?'. 要支持该范围内的其他字符,请将“编码”设置为 UTF8编码、UTF32编码或Unicode编码

另见。这是否意味着我无法使用
write
发送字节数组

默认情况下,SerialPort使用AscienceODing对字符进行编码

您将读/写
字符串
s或
字符
s的方法与读/写
字节
的方法混淆了

例如,当您将其称为:

端口写入(“аббб”)

默认情况下,您将在端口缓冲区中获得“?”(
0x3F
0x3F
0x3F
)。另一方面,这一呼吁:

// this is equivalent of sending "абв" in Windows-1251 encoding
port.Write(new byte[] { 0xE0, 0xE1, 0xE2 }, 0, 3)
将直接写入序列
0xE0
0xE1
0xE2
,而不将字节替换为
0x3F

UPD

让我们看看源代码:

public void Write(string text)
{
    // preconditions checks are omitted

    byte[] bytes = this.encoding.GetBytes(text);
    this.internalSerialStream.Write(bytes, 0, bytes.Length, this.writeTimeout);
}

public void Write(byte[] buffer, int offset, int count)
{
    // preconditions checks are omitted

    this.internalSerialStream.Write(buffer, offset, count, this.writeTimeout);
}
你看到区别了吗?
方法接受
字符串
,使用端口的当前编码将字符串转换为
字节
数组。方法,该方法接受
字节
数组,将其直接写入流,流是本机API的包装器

是的,文档愚弄了你。

port.Encoding = System.Text.Encoding.UTF8;

string testStr = "TEST";

port.Write(testStr);
还有这个

byte[] buf = System.Text.Encoding.UTF8.GetBytes(testStr);

port.Write(buf, 0, buf.Length);
将导致传输相同的字节。在后一种情况下,串行端口的编码可以是任何内容


串行端口编码只对读取或写入字符串的方法起作用。

是的,你可以@Roy:Yes,但这是一份文件,上面说“ascienceoding将大于127的所有字符编码为(char)63或“?”-这有点让人困惑,为什么我问你,如果你继续阅读,你会发现你可以改变编码。这是串行端口的命名恰当的编码属性。@dbasnett:因此,如果我将编码更改为UTF8,我应该能够发送字节数组?@dbasnett:Btw。您认为此实现合理吗:?是的,但我引用的(“ascienceoding将大于127的所有字符编码为(char)63或“?”)来自以字节数组为参数的Write文档,这就是我感到困惑的原因。那又怎样?不,这会是一种非常奇怪的行为。我会更新答案。好的,谢谢。也许你可以给我一些建议:,我似乎无法得到正确的回应。我应该试试SerialPort还是PInvoke?@user300224:对链接问题进行了评论,但我认为,如果您发布一个具体问题,它会更有用。我也回复了您的评论,请查看。是的,但我还没有转到测试部分。因为我需要编写一些读/写方法。首先选择方法是的,但我引用的(“AscienceODing将大于127的所有字符编码为(char)63或“?”)来自以字节数组为参数的Write文档-这就是为什么我感到困惑的原因。是的,端口的默认值为ASCII。您可以更改编码。