📄 rawread.cpp
字号:
#include "rar.hpp"RawRead::RawRead(File *SrcFile){ RawRead::SrcFile=SrcFile; ReadPos=0; DataSize=0;#ifndef SHELL_EXT Crypt=NULL;#endif}void RawRead::Read(int Size){#if !defined(SHELL_EXT) && !defined(NOCRYPT) if (Crypt!=NULL) { int CurSize=Data.Size(); int SizeToRead=Size-(CurSize-DataSize); if (SizeToRead>0) { int AlignedReadSize=SizeToRead+((~SizeToRead+1)&0xf); Data.Add(AlignedReadSize); int ReadSize=SrcFile->Read(&Data[CurSize],AlignedReadSize); Crypt->DecryptBlock(&Data[CurSize],AlignedReadSize); DataSize+=ReadSize==0 ? 0:Size; } else DataSize+=Size; } else#endif if (Size!=0) { Data.Add(Size); DataSize+=SrcFile->Read(&Data[DataSize],Size); }}void RawRead::Read(byte *SrcData,int Size){ if (Size!=0) { Data.Add(Size); memcpy(&Data[DataSize],SrcData,Size); DataSize+=Size; }}void RawRead::Get(byte &Field){ Field=Data[ReadPos]; ReadPos++;}void RawRead::Get(ushort &Field){ Field=Data[ReadPos]+(Data[ReadPos+1]<<8); ReadPos+=2;}void RawRead::Get(uint &Field){ Field=Data[ReadPos]+(Data[ReadPos+1]<<8)+(Data[ReadPos+2]<<16)+ (Data[ReadPos+3]<<24); ReadPos+=4;}void RawRead::Get8(Int64 &Field){ uint Low,High; Get(Low); Get(High); Field=int32to64(High,Low);}void RawRead::Get(byte *Field,int Size){ memcpy(Field,&Data[ReadPos],Size); ReadPos+=Size;}void RawRead::Get(wchar *Field,int Size){ RawToWide(&Data[ReadPos],Field,Size); ReadPos+=2*Size;}uint RawRead::GetCRC(bool ProcessedOnly){ return(DataSize>2 ? CRC(0xffffffff,&Data[2],(ProcessedOnly ? ReadPos:DataSize)-2):0xffffffff);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -