gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:13:44 25 4
gpt4 key购买 nike

Documentation of SerialPort Write

By default, SerialPort uses ASCIIEncoding to encode the characters. ASCIIEncoding encodes all characters greater than 127 as (char)63 or '?'. To support additional characters in that range, set Encoding to UTF8Encoding, UTF32Encoding, or UnicodeEncoding.

另见 here .这是否意味着我不能使用 write 发送字节数组?

最佳答案

By default, SerialPort uses ASCIIEncoding to encode the characters

您将读/写 stringchar 的方法与读/写 bytes 的方法混淆了。

例如,当您调用它时:

port.Write("абв")

你会得到“???” (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);
}

你看出区别了吗?
接受 string 的方法,使用当前端口编码将字符串转换为 byte 数组。接受 byte 数组的方法,将其直接写入流,该流是原生 API 的包装器。

是的,文档会愚弄你。

关于c# - 我可以使用 SerialPort.Write 发送字节数组吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32864198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com