如何在C#中将二进制文件读取为16个字节的十六进制段?

时间:2019-06-26 11:48:44

标签: c# hex

我刚接触C#,但是我必须使用这种语言,因为它是项目的一部分。 我正在做的基本上是一个特定的文件拆分器/合并器。 该程序将在找到特定的标头时知道在哪里拆分,并且文件必须以16位对齐方式工作,因此我必须将其读取为十六进制“ 16字节字符串”,例如

+...p......0...

必须读为

2B 00 00 00 70 00 00 00 0D 00 00 00 30 00 00 00 

由于编码/字符集问题,我不想将其读取为字符串。 你能建议我什么?我想到的一个问题是,每次读取16个字节可能会很慢,这是因为我尝试在C ++中执行读取缓冲区,而且速度并不快-根本-但我认为没有其他方法可以做到这一点。

1 个答案:

答案 0 :(得分:0)

这是我目前编写的代码。它有效,但我认为效率不高。

        int byteSize = 16;
        using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        {
            var buffer = new byte[byteSize]; // in this buffer I'm saving the 16 bytes read
            while (fs.Read(buffer, 0, byteSize) > 0)
            {
                string temp = System.Text.RegularExpressions.Regex.Replace(ByteArrayToHexViaLookup32(buffer), ".{2}", "$0 ");
                Console.WriteLine(temp);
            }
        }

对于十六进制转换,我使用的是“ ByteArrayToHexViaLookup32”函数,该函数在本网站上可以找到,并且非常快速和有效。 该程序将要读取的文件大约为700-800 KB。 regex仅用于控制台可见性/调试(每个字节添加一个空格),因此不会很快出现。

我的CPU迅速达到了30%,并在2/3秒内完成了该过程,这就是为什么我说这可能不是一种有效的方法。 (我有一个6700HQ,所以我认为在2 Duo上,要运行该程序的CPU,将会花费更多的时间)