rawread.cpp

来自「Rar 的控制台解压程序」· C++ 代码 · 共 102 行

CPP
102
字号
#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 + =
减小字号Ctrl + -
显示快捷键?