【问题标题】:How to treat ASCII code as a string rather than it's character如何将 ASCII 代码视为字符串而不是字符
【发布时间】:2021-09-26 21:14:24
【问题描述】:

当检查包含 ASCII 代码的字符串时,例如ABC\x30XYZ,我怎样才能把它读成那个完整的字符串,而不是把它读成字符串ABC0XYZ

例如:

var value = "ABC\x30XYZ";
foreach(var c in value)
{
    Console.Write(c);
} 
// Desired output: ABC\x30XYZ
// Actual output: ABC0XYZ

我猜我需要对 Encoding 做一些事情,但我正在努力寻找解决方案。我觉得我错过了一些非常明显的东西,当有人指出这一点时,我准备羞愧地低下头。

【问题讨论】:

  • 这只是您在 C# 中将其作为文字键入的方式,因为转义,实际的二进制表示包含单个 Unicode 代码点。比如你也可以做其他字符"\x41""A"完全一样
  • 所以在我上面的例子中,子字符串\x30 在运行时是否真的不存在,不管使用一些特定的编码等吗?
  • 正确,这就是你写文字的方式。在你的情况下\x30 只是0

标签: c# escaping ascii


【解决方案1】:

如果您自己创建字符串,则需要转义“\x30” ASCII 符号才能将其视为字符串:

var value = "ABC\\x30XYZ";

如果您想从输入字符串中解析 A​​SCII 码,您可以使用正则表达式解析:

 var value = "ABC\\x30XYZ";
 var values = Regex.Matches(value, @"\\x[\d]{2}|.");
 foreach (var c in values)
 {
    Console.Write(c);
 }

根据您期望的输入格式使用适当的正则表达式。

【讨论】:

  • 谢谢。这是我准备的令人震惊的时刻...作为您提到的替代方案,我还可以使用逐字标识符 @ 来声明字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
相关资源
最近更新 更多