如何在C#中将二进制文件读取为16字节十六进制段?
我对C#很陌生,但我必须使用这种语言,因为它是项目的一部分。 我所做的基本上是一个特定的文件拆分/合并。 当找到一个特定的头时,程序将知道在哪里拆分,并且文件必须使用16位对齐,因此我必须将其作为十六进制的“16字节字符串”来读取,如如何在C#中将二进制文件读取为16字节十六进制段?,c#,hex,C#,Hex,我对C#很陌生,但我必须使用这种语言,因为它是项目的一部分。 我所做的基本上是一个特定的文件拆分/合并。 当找到一个特定的头时,程序将知道在哪里拆分,并且文件必须使用16位对齐,因此我必须将其作为十六进制的“16字节字符串”来读取,如 +...p......0... 必须理解为 2B 00 00 00 70 00 00 00 0D 00 00 00 30 00 00 00 由于编码/字符集问题,我不想将其作为字符串读取。 你能给我提些什么建议吗?我想一个问题是每次读16字节可能很慢,因为我
+...p......0...
必须理解为
2B 00 00 00 70 00 00 00 0D 00 00 00 30 00 00 00
由于编码/字符集问题,我不想将其作为字符串读取。
你能给我提些什么建议吗?我想一个问题是每次读16字节可能很慢,因为我试着在C++中做一个FRAM缓冲区,而且它不快——但是我想不出其他的方法来做。 < P>这是我现在写的代码。这是可行的,但我认为效率不高
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千字节。
正则表达式只用于控制台可见性/调试(每个字节添加一个空格),因此它不会很快出现
我的CPU很快达到30%,它在2/3秒内完成了这个过程,这就是为什么我说这可能不是一个有效的方法。(我有一个6700HQ,所以我认为在一个2 Duo上,运行这个程序的CPU需要更多的时间)你可以使用这个方法。流已经有一个内部缓冲区,谢谢。我尝试使用FileStream函数来实现它,它似乎可以工作,但效率不高。还有其他建议吗?