我正在编写一个适用于文件十六进制的应用程序,但不是所有文件都在一个文件中,但只有这个文件具有指定的偏移量。到目前为止,我正在使用一个从这里取得的功能,但它在我的情况下并不好用。
public static string HexStr(byte[] p)
{
char[] c = new char[p.Length * 2 + 2];
byte b;
c[0] = '0'; c[1] = 'x';
for (int y = 0, x = 2; y < p.Length; ++y, ++x)
{
b = ((byte)(p[y] >> 4));
c[x] = (char)(b > 9 ? b + 0x37 : b + 0x30);
b = ((byte)(p[y] & 0xF));
c[++x] = (char)(b > 9 ? b + 0x37 : b + 0x30);
}
return new string(c);
}
byte[] byVal;
using (Stream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
BinaryReader brFile = new BinaryReader(fileStream);
fileStream.Position = key;
byte[] offsetByte = brFile.ReadBytes(0);
string offsetString = HexStr(offsetByte);
byVal = brFile.ReadBytes(16);
}
有人可以提出这个问题的其他解决方案吗?
P.S。此代码采用指定偏移量的文件十六进制(fileStream.Position=key
&#34;键&#34;是偏移量),这是我的弱点
答案 0 :(得分:1)
试试此代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
const string path = @"C:\temp\test.txt";
static void Main(string[] args)
{
long offset = 25;
long key = offset - (offset % 16);
using (Stream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
BinaryReader brFile = new BinaryReader(fileStream);
fileStream.Position = key;
List<byte> offsetByte = brFile.ReadBytes(16).ToList();
string offsetString = string.Join(" ", offsetByte.Select(x => "0x" + x.ToString("x2")).ToArray());
}
}
}
}