我刚接触C#,但是我必须使用这种语言,因为它是项目的一部分。 我正在做的基本上是一个特定的文件拆分器/合并器。 该程序将在找到特定的标头时知道在哪里拆分,并且文件必须以16位对齐方式工作,因此我必须将其读取为十六进制“ 16字节字符串”,例如
+...p......0...
必须读为
2B 00 00 00 70 00 00 00 0D 00 00 00 30 00 00 00
由于编码/字符集问题,我不想将其读取为字符串。 你能建议我什么?我想到的一个问题是,每次读取16个字节可能会很慢,这是因为我尝试在C ++中执行读取缓冲区,而且速度并不快-根本-但我认为没有其他方法可以做到这一点。
答案 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,将会花费更多的时间)