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

时间:2015-09-24 13:56:05

标签: c# hex offset system.io.file

我正在编写一个适用于文件十六进制的应用程序,但不是所有文件都在一个文件中,但只有这个文件具有指定的偏移量。到目前为止,我正在使用一个从这里取得的功能,但它在我的情况下并不好用。

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

1 个答案:

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