3

所以我正在尝试使用蓝牙模块(HC-06)来读取从我的手机发送到我的 Netduino 板的数据。但是,我无法将字节转换为文本,因此我可以比较我发送的字符,从而将它们转换为条件语句。从我所见,我需要在 C# 中使用以下代码行将其从字节数组更改为字符串,但是我在我的范围内找不到类的定义!这是行:

Encoding.ASCII.GetString();

这是我得到的错误:

'System.Text.Encoding' does not contain definition for 'ASCII'

我在Visual Studio Express 2012IDE 中使用 .Net Micro Framework 4.1 版。我用的是原版的NetduinoNetduino 1带的4.1 Framework

4

2 回答 2

3

不包括 ASCII 编码,因为它不是必需的。UTF-8 与 ASCII 相同,MSB 与文本流无关。只要正确发送和接收内容,您就应该能够使用 UTF8 编码获得正确的文本表示。例如,如果缓冲区包含您收到的文本...

Debug.Print(new String(Encoding.UTF8.GetChars(buffer, 0, buffer.Length)));

于 2015-05-31T19:30:17.850 回答
0

Encoding.ASCII 存在于 .NET 4.7.2 标准中,但并非无处不在。看

https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding.ascii?view=netframework-4.7.2

如果像我一样,你偶然发现了这个页面,因为你正在开发一个可移植的库,你会注意到该页面底部的“适用于”部分,Encoding.ASCII 并非在所有上下文中都可用。

在任何 7 位编码不可用的地方,您需要手动过滤掉任何 8 位及以上的字节并使用 Encoding.UTF8。一个简单的方法是使用正则表达式替换。如果您可以在字符串中允许空值,您可以修改以下代码,我将它们排除在外。

String MyASCIIString = Encoding.UTF8.GetString(MyByteArray);
Regex NotASCII = new Regex("[^\u0001-\u007f]+");
MyASCIIString = NotASCII.Replace(MyASCIIString, "");
于 2019-04-05T23:21:32.603 回答