바이트 배열 모음을 읽고있는 이진 파일이 있습니다.바이너리 파일을 바이트 배열로 읽는 방법?
파일에 여러 개의 (임의의 숫자) 레코드가 포함되어 있습니다. 본질적으로 바이트 블록. 각 레코드의 길이는 임의입니다.
파일의 헤더는 각 레코드의 오프셋을 제공합니다.
record 0: offset 2892
record 1: offset 4849
....
record 98: offset 328932
record 99: offset 338498
루프를 수행하고 각 레코드를 바이트 배열로 읽는 코드를 작성했습니다. 오프셋의 차이를 보면 레코드 크기가 나옵니다. 오프셋을 검색 한 다음 ReadBytes()를 호출하면 해당 레코드가 해당 배열로 읽습니다.
내 현재의 불완전한 해결 방법은 마지막 레코드에서 작동하지 않습니다. 마지막 레코드를 어떻게 배열로 읽어 낼 것인가?
이유는 무엇입니까? 각 레코드는 암호화되어 있으므로 별도로 해독해야합니다. 각 레코드를 바이트 배열로 읽는 코드를 작성하고 있습니다. 암호 해독 후 모든 레코드를 다시 파일에 기록하십시오.
코드는 요청에 추가 :
//recordOffsets contain byte location of each record start. All headers (other than universal header) are contained within record 0.
recordBlocks = new List<RecordBlock>();
//store all recordOffsets. Record0 offset will be used to load rest of headers. Remaining are used to parse text of eBook.
for (int i = 0; i < standardHeader.numRecs; i++)
{
RecordBlock r = new RecordBlock();
r.offset = bookReader.ReadInt32(EndianReader.Endian.BigEndian);
r.number = bookReader.ReadInt32(EndianReader.Endian.BigEndian);
recordBlocks.Add(r);
}
foreach (RecordBlock r in recordBlocks)
{
if (r.number == recordBlocks.Count)
{
///deal with last record
}
else
{
r.size = recordBlocks[(r.number) + 1].offset - r.offset;
}
bookReader.Seek(r.offset, SeekOrigin.Begin);
r.data = bookReader.ReadBytes(r.size);
}
몇 가지 코드를 게시 할 수 있습니까? – TalentTuner
지금까지 코드를 보여줄 수 있습니까? – Aamir