假设我想在.Net字符串中使用ASCII特殊字符FS(0x1C),然后能够使用该特殊字符正确表示为单个字节的格式化字节数组,我该如何做?我似乎无法理解这个问题。
谢谢您可以提供的任何帮助。
谢谢您可以提供的任何帮助。
"\x1C"
这是该单个字符的字符串表示。假设您想将其作为字节数组获取:
byte[] bytes = Encoding.ASCII.GetBytes("\x1C");
如果您想从字节数组中获取一个字符串:
string s = Encoding.ASCII.GetString(bytes);
请注意,还有更多的编码方式,比如UTF8,在编码命名空间中,根据您的需求可能会更好 - 虽然从串行线读取时,您可能希望使用纯ASCII。
这要看串口数据格式的特性。如果数据主要由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并不是您唯一可以使用的字符串编码,但从串行端口来看,它最有可能被使用。
如果你想处理ASCII,你应该看一下ASCIIEncoding类http://msdn.microsoft.com/en-us/library/system.text.asciiencoding.aspx。.Net字符串是Unicode(UCS2)。如果你想要特定的编码,你需要使用其中一个编码类。
你可以通过转义字符来嵌入一个不可打印的字符,例如"My string \x1c"。