c# - 将 bytes[] 转换为文字字符串

标签 c#

我的 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/

相关文章:

c# - 是否有像文件流一样阻塞的内存流

c# - DataGridView 列的某些单元格中的位图

c# - 无法在 Ubuntu 上匿名连接到 Mosquitto 2.0.5

c# - 从 .net 调用 DocumentDb 存储过程

c# - 以 KB 为单位获取文件大小

c# - 如何修复 "The type or namespace name could not be found"?

c# - ReSharper:重构以消除中间接口(interface)

c# - 从路径加载程序集

c# - 引用中断控制台应用程序在其他机器上运行

c# - 自动完成搜索列表问题