gpt4 book ai didi

c# 十六进制字节 0x09 (ascii -> tab) 到 "\t"字符串

转载 作者:行者123 更新时间:2023-11-30 22:15:19 28 4
gpt4 key购买 nike

我需要将文本文件的字节数组转换为字符串字符表示形式。

例如,如果我有一个包含以下内容的文本文件:

你好(制表符)那里(换行符) friend

我想将其转换为数组:

my_array  = {'h', 'e' ,'l','l','o', '\t', 't', 'h','e','r','e', '\r','\n', 'f', 'r' ,'i','e','n', 'd'};

我在将控制字符转换为其转义字符串时遇到问题,即:

  • 0x09 = '\t';
  • 0x0D = '\r';
  • 0x0A = '\n';

我已经试过了,但是这里没有显示制表符和新行:

byte[] text_bytes = File.ReadAllBytes("ok.txt");
char[] y = Encoding.ASCII.GetChars(text_bytes);

我知道我可以循环遍历每个字节并有一个条件来查找 0x09,如果我找到它,然后替换为 "\t",但是我我想知道是否有内置的东西。

最佳答案

有几种方法可以做到这一点。最简单的方法是将整个文件加载到内存中:

string theText = File.ReadAllText(filename);

然后使用string.Replace 替换您感兴趣的项目:

// "escaping" the '\t' with '\\t' makes it write the literal characters '\' and 't'
theText = theText.Replace("\t", "\\t");

theText = theText.Replace("\r", "\\r");
theText = theText.Replace("\n", "\\n");

然后您可以创建您的字符数组。如果确定都是ASCII文本,可以使用Encoding.ASCII:

byte[] theChars = Encoding.ASCII.GetBytes(theText);

或者,如果你想要一个字符数组:

char[] theChars = theText.ToCharArray();

对于您的目的来说,这可能已经足够快了。您可以通过单次遍历字符串、逐个字符读取并复制到 StringBuilder 来加快速度:

StringBuilder sb = new StringBuilder(theText.Length);
foreach (char c in theText)
{
switch (c)
{
case '\t' : sb.Append("\\t"); break;
case '\r' : sb.Append("\\r"); break;
case '\n' : sb.Append("\\n"); break;
default : sb.Append(c); break;
}
}

byte[] theChars = Encoding.ASCII.GetBytes(sb.ToString());

关于c# 十六进制字节 0x09 (ascii -> tab) 到 "\t"字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18022074/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com