rarheader.h

来自「由7-zip提供的压缩、解压缩程序」· C头文件 代码 · 共 225 行

H
225
字号
// Archive/RarHeader.h#ifndef __ARCHIVE_RAR_HEADER_H#define __ARCHIVE_RAR_HEADER_H#include "Common/Types.h"namespace NArchive{namespace NRar{namespace NHeader{const int kMarkerSize = 7;extern Byte kMarker[kMarkerSize];  const int kArchiveSolid = 0x1;namespace NBlockType{  enum EBlockType  {     kMarker        = 0x72,    kArchiveHeader = 0x73,    kFileHeader    = 0x74,    kCommentHeader = 0x75,    kOldAuthenticity = 0x76,    kSubBlock       = 0x77,    kRecoveryRecord = 0x78,    kAuthenticity   = 0x79,    kEndOfArchive   = 0x7B // Is not safe  };}namespace NArchive{  const UInt16 kVolume  = 1;  const UInt16 kComment = 2;  const UInt16 kLock    = 4;  const UInt16 kSolid   = 8;  const UInt16 kNewVolName = 0x10; // ('volname.partN.rar')  const UInt16 kAuthenticity  = 0x20;  const UInt16 kRecovery = 0x40;  const UInt16 kBlockEncryption  = 0x80;  const UInt16 kFirstVolume = 0x100; // (set only by RAR 3.0 and later)  const UInt16 kEncryptVer = 0x200; // RAR 3.6 there is EncryptVer Byte in End of MainHeader    const int kHeaderSizeMin = 7;  struct CBlock  {    UInt16 CRC;    Byte Type;    UInt16 Flags;    UInt16 Size;    UInt16 Reserved1;    UInt32 Reserved2;    // UInt16 GetRealCRC() const;  };    const int kArchiveHeaderSize = 13;  const int kBlockHeadersAreEncrypted = 0x80;  struct CHeader360: public CBlock  {    Byte EncryptVersion;    bool IsEncrypted() const { return (Flags & NHeader::NArchive::kBlockEncryption) != 0; }    bool IsThereEncryptVer() const { return (Flags & NHeader::NArchive::kEncryptVer) != 0; }    bool IsEncryptOld() const { return (!IsThereEncryptVer() || EncryptVersion < 36); }    UInt32 GetBaseSize() const { return kArchiveHeaderSize + (IsEncryptOld() ? 0 : 1); }  };}namespace NFile{  const int kSplitBefore = 1 << 0;  const int kSplitAfter  = 1 << 1;  const int kEncrypted   = 1 << 2;  const int kComment     = 1 << 3;  const int kSolid       = 1 << 4;    const int kDictBitStart     = 5;  const int kNumDictBits  = 3;  const int kDictMask         = (1 << kNumDictBits) - 1;  const int kDictDirectoryValue  = 0x7;    const int kSize64Bits    = 1 << 8;  const int kUnicodeName   = 1 << 9;  const int kSalt          = 1 << 10;  const int kOldVersion    = 1 << 11;  const int kExtTime       = 1 << 12;  // const int kExtFlags      = 1 << 13;  // const int kSkipIfUnknown = 1 << 14;  const int kLongBlock    = 1 << 15;    /*  struct CBlock  {    // UInt16 HeadCRC;    // Byte Type;    // UInt16 Flags;    // UInt16 HeadSize;    UInt32 PackSize;    UInt32 UnPackSize;    Byte HostOS;    UInt32 FileCRC;    UInt32 Time;    Byte UnPackVersion;    Byte Method;    UInt16 NameSize;    UInt32 Attributes;  };  */  /*  struct CBlock32  {    UInt16 HeadCRC;    Byte Type;    UInt16 Flags;    UInt16 HeadSize;    UInt32 PackSize;    UInt32 UnPackSize;    Byte HostOS;    UInt32 FileCRC;    UInt32 Time;    Byte UnPackVersion;    Byte Method;    UInt16 NameSize;    UInt32 Attributes;    UInt16 GetRealCRC(const void *aName, UInt32 aNameSize,         bool anExtraDataDefined = false, Byte *anExtraData = 0) const;  };  struct CBlock64  {    UInt16 HeadCRC;    Byte Type;    UInt16 Flags;    UInt16 HeadSize;    UInt32 PackSizeLow;    UInt32 UnPackSizeLow;    Byte HostOS;    UInt32 FileCRC;    UInt32 Time;    Byte UnPackVersion;    Byte Method;    UInt16 NameSize;    UInt32 Attributes;    UInt32 PackSizeHigh;    UInt32 UnPackSizeHigh;    UInt16 GetRealCRC(const void *aName, UInt32 aNameSize) const;  };  */    const int kLabelFileAttribute            = 0x08;  const int kWinFileDirectoryAttributeMask = 0x10;    enum CHostOS  {     kHostMSDOS = 0,       kHostOS2   = 1,       kHostWin32 = 2,       kHostUnix  = 3,      kHostMacOS = 4,      kHostBeOS = 5  };}namespace NBlock{  const UInt16 kLongBlock = 1 << 15;  struct CBlock  {    UInt16 CRC;    Byte Type;    UInt16 Flags;    UInt16 HeadSize;    //  UInt32 DataSize;  };}/*struct CSubBlock{  UInt16 HeadCRC;  Byte HeadType;  UInt16 Flags;  UInt16 HeadSize;  UInt32 DataSize;  UInt16 SubType;  Byte Level; // Reserved : Must be 0};struct CCommentBlock{  UInt16 HeadCRC;  Byte HeadType;  UInt16 Flags;  UInt16 HeadSize;  UInt16 UnpSize;  Byte UnpVer;  Byte Method;  UInt16 CommCRC;};struct CProtectHeader{  UInt16 HeadCRC;  Byte HeadType;  UInt16 Flags;  UInt16 HeadSize;  UInt32 DataSize;  Byte Version;  UInt16 RecSectors;  UInt32 TotalBlocks;  Byte Mark[8];};*/}}}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?