我有一个十六进制字符串(例如0CFE9E69271557822FE715A8B3E564BE
),我想将它作为字节写入文件。例如,将字节写入文件
Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
00000000 0C FE 9E 69 27 15 57 82 2F E7 15 A8 B3 E5 64 BE .þži'.W‚/ç.¨³åd¾
我该如何使用.NET和C#来完成此操作?
我有一个十六进制字符串(例如0CFE9E69271557822FE715A8B3E564BE
),我想将它作为字节写入文件。例如,将字节写入文件
Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
00000000 0C FE 9E 69 27 15 57 82 2F E7 15 A8 B3 E5 64 BE .þži'.W‚/ç.¨³åd¾
我该如何使用.NET和C#来完成此操作?
如果我正确,这个你懂应该做的伎俩。如果您尚未拥有它,则需要在文件顶部添加using System.IO
。
public bool ByteArrayToFile(string fileName, byte[] byteArray)
{
try
{
using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
fs.Write(byteArray, 0, byteArray.Length);
return true;
}
}
catch (Exception ex)
{
Console.WriteLine("Exception caught in process: {0}", ex);
return false;
}
}
最简单的方法是将您的十六进制字符串转换为字节数组并使用File.WriteAllBytes
方法。
从this question使用StringToByteArray()
方法,你会做这样的事情:
string hexString = "0CFE9E69271557822FE715A8B3E564BE";
File.WriteAllBytes("output.dat", StringToByteArray(hexString));
的StringToByteArray
方法包含如下:
public static byte[] StringToByteArray(string hex) {
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
Thx,这工作正常。我怎样才能将字节附加到同一个文件? (在第一个'字符串'之后) –
@Robertico:你为WriteAllBytes的第三个参数添加一个布尔值true。你有没有发现MSDN?这是搜索WriteAllBytes附件时的第一个Google链接。 – 2011-06-18 20:43:00
我收到一个错误,添加了布尔值'方法'WriteAllBytes'没有重载'3'参数'。 MSDN介绍:'但是,如果您使用循环将数据添加到文件,BinaryWriter对象可以提供更好的性能,因为您只需打开和关闭一次文件。“我正在使用循环。我使用@ 0A0D中的示例并将“FileMode.Create”更改为“FileMode.Append”。 –
将十六进制字符串转换为字节数组。
public static byte[] StringToByteArray(string hex) {
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
信用:Jared Par
然后用WriteAllBytes写入文件系统。
private byte[] Hex2Bin(string hex) {
if ((hex == null) || (hex.Length < 1)) {
return new byte[0];
}
int num = hex.Length/2;
byte[] buffer = new byte[num];
num *= 2;
for (int i = 0; i < num; i++) {
int num3 = int.Parse(hex.Substring(i, 2), NumberStyles.HexNumber);
buffer[i/2] = (byte)num3;
i++;
}
return buffer;
}
private string Bin2Hex(byte[] binary) {
StringBuilder builder = new StringBuilder();
foreach (byte num in binary) {
if (num > 15) {
builder.AppendFormat("{0:X}", num);
} else {
builder.AppendFormat("0{0:X}", num);/////// 大于 15 就多加个 0
}
}
return builder.ToString();
}
Thx,这也很好。我怎样才能将字节附加到同一个文件? (在第一个'字符串'之后) –
可能http://stackoverflow.com/questions/311165/how-do-you-convert-byte-array-to-hexadecimal-string-and-vice-versa-in-c –
的副本@斯蒂芬:只有部分。不是最重要的部分。 –
[可以将字节\ [\]数组写入C#中的文件的可能的重复?](http://stackoverflow.com/questions/381508/can-a-byte-array-be-written-to-a -file-in-c)(也可能只是部分重复)。 –