.net 在C#中将十六进制数据转换为文本

u0njafvf  于 2023-03-20  发布在  .NET
关注(0)|答案(2)|浏览(280)

我知道有很多这样的问题,但它们似乎并不像我期望的那样有效,或者可能我不知道如何使用它们。
基本上,我该如何转换:

65 78 61 6d 70 6c 65

变成这样:

example

基本上与十六进制编辑器类似(HxD、Microhex等)
这样做的原因是因为我希望基于十六进制数据写入数据,而不使用

using (BinaryWriter bw = new BinaryWriter(File.Open("file.txt", FileMode.Append)))
{
    bw.Write("foo bar"); // Here we are writing binary data normally, but not what I would want
}
dffbzjpn

dffbzjpn1#

您所看到的是使用ASCII(或者可能是UTF-8)编码转换成字节的文本。
因此,您可以使用一个合适的Encoding对象将其返回。

byte[] bytes = new byte[] { 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65 };
string s = Encoding.ASCII.GetString(bytes);
Console.WriteLine(s);

注意,您处理的是文件或流,有许多工具在内部使用Encoding将字符串转换为字节,反之亦然:

  • File.ReadAllText/File.ReadAllLines等在内部使用Encoding
  • StreamWriter/StreamReader允许您从流读取字符串或将字符串写入流,并使用Encoding将这些字符串转换为字节
  • File.OpenText/File.CreateText/ etc对文件执行相同的操作
zdwk9cvp

zdwk9cvp2#

另一个解决方案是cast byte to char

byte[] bytes = new byte[] { 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65 };
 string result = "";
 for(int i=0;i<bytes.Length;i++)
       result+=(char)bytes[i];

 Console.WriteLine(result); //example

您还可以使用linqbyte数组转换为char数组。并使用String.Join()将字符进行圆锥形转换

Console.WriteLine(string.Join("", bytes.Select(x => (char)x))); //example

相关问题