如何解决将字节写入文件
| 我有一个十六进制字符串(例如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#完成此操作?
解决方法
如果我对您的理解正确,这应该可以解决问题。如果您还没有文件,则需要在文件顶部添加2。
public bool ByteArrayToFile(string fileName,byte[] byteArray)
{
try
{
using (var fs = new FileStream(fileName,FileMode.Create,FileAccess.Write))
{
fs.Write(byteArray,byteArray.Length);
return true;
}
}
catch (Exception ex)
{
Console.WriteLine(\"Exception caught in process: {0}\",ex);
return false;
}
}
, 最简单的方法是将十六进制字符串转换为字节数组,然后使用File.WriteAllBytes
方法。
使用此问题中的StringToByteArray()
方法,您将执行以下操作:
string hexString = \"0CFE9E69271557822FE715A8B3E564BE\";
File.WriteAllBytes(\"output.dat\",StringToByteArray(hexString));
included7ѭ方法如下:
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();
}
, 尝试这个:
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,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();
}
, 您将十六进制字符串转换为字节数组。
public static byte[] StringToByteArray(string hex) {
return Enumerable.Range(0,hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x,16))
.ToArray();
}
图片来源:Jared Par
然后使用WriteAllBytes写入文件系统。
, 本示例将6个字节读入一个字节数组并将其写入另一个字节数组。它对字节进行XOR操作,以便写入文件的结果与原始起始值相同。该文件的大小始终为6个字节,因为它写入的位置为0。
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
byte[] b1 = { 1,2,4,8,16,32 };
byte[] b2 = new byte[6];
byte[] b3 = new byte[6];
byte[] b4 = new byte[6];
FileStream f1;
f1 = new FileStream(\"test.txt\",FileAccess.Write);
// write the byte array into a new file
f1.Write(b1,6);
f1.Close();
// read the byte array
f1 = new FileStream(\"test.txt\",FileMode.Open,FileAccess.Read);
f1.Read(b2,6);
f1.Close();
// make changes to the byte array
for (int i = 1; i < b2.Length; i++)
{
b2[i] = (byte)(b2[i] ^ (byte)10); //xor 10
}
f1 = new FileStream(\"test.txt\",FileAccess.Write);
// write the new byte array into the file
f1.Write(b2,6);
f1.Close();
f1 = new FileStream(\"test.txt\",FileAccess.Read);
// read the byte array
f1.Read(b3,6);
f1.Close();
// make changes to the byte array
for (int i = 1; i < b3.Length; i++)
{
b4[i] = (byte)(b3[i] ^ (byte)10); //xor 10
}
f1 = new FileStream(\"test.txt\",FileAccess.Write);
// b4 will have the same values as b1
f1.Write(b4,6);
f1.Close();
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。