C#-写入包含十六进制值作为字节的字符串

时间:2018-06-30 09:06:40

标签: c# utf-8 filestream

假设我有一个字符串

string hex = "55 6E 6B 6E 6F 77 6E 20 53 70 61 63 65"

我想将这些写到文件中,但是它们应该是字节本身。 因此结果将是“未知空间”。

有什么方法可以直接将其写入encoding而不是首先utf-8并将其写入文件吗?我要问的原因是,有时utf-8中有一个特殊字符(例如0xE28780),如果我先将字符串分成每个值的字符,这将无法正常工作。 / p>

非常感谢!

1 个答案:

答案 0 :(得分:7)

带有string.SplitConvert.ToByteFileStreamFile.WriteAllBytes

string hex = "55 6E 6B 6E 6F 77 6E 20 53 70 61 63 65";
var bytes = hex.Split(' ')
               .Select(x => Convert.ToByte(x, 16))
               .ToArray();

using (var fs = new FileStream(@"D:\test2.dat",FileMode.Create))
   fs.Write(bytes,0,bytes.Length);

// or even easier 

File.WriteAllBytes(@"D:\test2.dat",bytes);

String.Split Method

  

返回一个字符串数组,该数组包含此实例中的子字符串   由指定的字符串或Unicode元素分隔的   字符数组。

Convert.ToByte Method (String, Int32)

  

将指定基数中的数字的字符串表示形式转换为   等效的8位无符号整数。

FileStream Class

  

为文件提供流,同时支持同步和   异步读写操作。

File.WriteAllBytes Method (String, Byte[])

  

创建一个新文件,将指定的字节数组写入该文件,然后   然后关闭文件。如果目标文件已经存在,则为   覆盖。