如何在 .Net 字符串中编写 ASCII 特殊字符

7
假设我想在.Net字符串中使用ASCII特殊字符FS(0x1C),然后能够使用该特殊字符正确表示为单个字节的格式化字节数组,我该如何做?我似乎无法理解这个问题。
谢谢您可以提供的任何帮助。

在回答你的问题之前,我想知道为什么你要将字符串转换为字节数组。 - Christian Hayter
我正在编写一个函数,用于解析来自串口的字节数组,但目前我是在盲目地工作,并没有任何实际数据进行测试。由于我有显示格式的文档,因此我可以创建自己的数据,并希望将其编写为 .Net 字符串,将其转换为字节数组,然后使用我的函数解析它。但也许有更好的方法。我也愿意听取建议。 - JimDaniel
3个回答

3
以下是如何将其嵌入字符串中的方法:
"\x1C"

这是该单个字符的字符串表示。假设您想将其作为字节数组获取:

byte[] bytes = Encoding.ASCII.GetBytes("\x1C");

如果您想从字节数组中获取一个字符串:

string s = Encoding.ASCII.GetString(bytes);

请注意,还有更多的编码方式,比如UTF8,在编码命名空间中,根据您的需求可能会更好 - 虽然从串行线读取时,您可能希望使用纯ASCII。


3

这要看串口数据格式的特性。如果数据主要由ASCII文本字符组成,偶尔夹杂控制字符,那么你可以将它们嵌入字符串中,例如:

var data1 = Encoding.ASCII.GetBytes("Foo\x1CBar\x1CBaz");

然而,如果数据由多个不同数据类型的字段组成,则BitConverter类可能更有用,例如:

var data2 = new List<byte>();
// Add an int value
data2.AddRange(BitConverter.GetBytes(6));
// Add a control character
data2.Add(0x1C);
// Add an ASCII-encoded string value
data2.AddRange(Encoding.ASCII.GetBytes("Hello"));

正如其他人指出的那样,ASCII并不是您唯一可以使用的字符串编码,但从串行端口来看,它最有可能被使用。


谢谢,BitConverter 在我的情况下会很有用。 - JimDaniel
第一个例子(data1)没有给出预期的结果。\x1CBa被解释为一个Unicode字符。 - Johan Franzén

1

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