从指定的偏移量中获取十六进制代码 - C#

Take hex code from specified offset - C#

我正在编写一个应用程序,它可以处理文件的十六进制,但不能处理所有文件,而只能处理具有指定偏移量的文件。到目前为止,我正在使用从此处获取的函数,但在我的情况下效果不佳。

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 "key" 是偏移量),这是我的弱点

试试这个代码

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());
            }
        }
    }
}​