尝试将文件按十六进制地址拆分为十六进制地址时遇到困难。 好像它的分裂很好,但是当我检查文件时,它总是复制文件开头的每个字节而不是起始地址。
请让我知道我哪里出错了 输入字符串是十六进制地址(字符串)转换为long
private void HexSplit(string inputFile, string outputFile, string startAddress, string endAddress)
{
FileStream hexReader = new FileStream(inputFile, FileMode.Open);
FileStream hexWriter = new FileStream(outputFile, FileMode.Create);
long StartAddress = Convert.ToInt64(startAddress.ToUpper(), 16);
long EndAddress = Convert.ToInt64(endAddress.ToUpper(), 16);
int bytecount = 0;
while (bytecount != EndAddress)
{
if (bytecount >= StartAddress && bytecount <= EndAddress) hexWriter.WriteByte((byte)hexReader.ReadByte());
bytecount++;
}
hexReader.Close();
hexReader.Dispose();
hexWriter.Close();
hexWriter.Dispose();
}
答案 0 :(得分:1)
您应该阅读输入以使阅读器位于当前起点
byte b = hexReader.ReadByte();
if (bytecount >= StartAddress && bytecount <= EndAddress)
hexWriter.WriteByte(b);
bytecount++;
或者您可以使用Filestream.Position属性直接设置正确的起点,避免读取输入文件中不必要的部分
long byteCount = StartAddress;
hexReader.Position = StartAddress;
while (bytecount <= EndAddress)
{
hexWriter.WriteByte((byte)hexReader.ReadByte());
bytecount++;
}
请注意,在这两种情况下都应检查传递的输入,因为如果地址大于文件的长度,您将收到异常
if(hexReader.Length < EndAddress)
// Error message and return