我的 C# 程序有问题。我目前正在开发一个网关(TCP 和 UDP 协议(protocol)),并且必须将流量记录到文件中。我得到了一些测试数据来尝试我的网关。示例数据:ASYRE\x00\x00\x01。
我的程序应该将其记录到一个文件中,这就是我的问题:当记录到文件(或将其写入控制台)时,我得到 ASYRE,并且特殊的\x00\x00\x01 字符将在文件,但是,我必须在它们进入时将它们记录下来,因此在记录时它们应该是“ASYRE\x00\x00\x01”。
我尝试使用Encoding.Default.GetString()
、Convert.ToString()
、Parse
甚至Regex
,但我不知道如何正确记录它。
最佳答案
您正在寻找一个字符串Dump,您可以在Linq的帮助下实现它:
using System.Linq;
...
private static string Dump(string value) {
if (null == value)
return "[null]";
return string.Concat(value.Select(c =>
c < ' ' ? $"\\x{(int)c:x2}"
: char.GetUnicodeCategory(c) == UnicodeCategory.Format ? $"\\u{(int)c:x4}"
: c.ToString()));
}
如果您想要一个没有 Linq 的解决方案,请查看 StringBuilder
:
private static string Dump(string value) {
if (null == value)
return "[null]";
StringBuilder sb = new StringBuilder();
foreach(char c in value)
if (c < ' ')
sb.Append($"\\x{(int)c:x2}");
else if (char.GetUnicodeCategory(c) == UnicodeCategory.Format)
sb.Append($"\\u{(int)c:x4}");
else
sb.Append(c);
return sb.ToString();
}
演示:
Console.Write(Dump("ASYRE\x00\x00\x01"));
结果:
ASYRE\x00\x00\x01
关于c# - 将 bytes[] 转换为文字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70244762/