#pragma once #include #include #include class BaseRead :public std::fstream { private: const BYTE Key[256] = { 112,117,99,104,105,107,111,110,64,110,101,111,112,108,101,32,100,117,110,103,101,111,110,32,97,110,100,32,102,105,103,104,116,101,114,32,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,68,78,70,0 }; public: //char* 转整数 int CharToInt(char* Str) { return *(int*)Str; } //char* 转Long long CharToLong(char* Str) { return *(long long*)Str; } //读整数 int ReadInt() { char* CountBuffer = new char[4]; for (int i = 0; i < 4; i++) { this->get(CountBuffer[i]); } int Count = CharToInt(CountBuffer); delete[]CountBuffer; return Count; } //读字符串 std::string ReadString() { char* CharBuffer = new char[1024]; this->get(CharBuffer, 1024, '\0'); std::string Str = CharBuffer; delete[]CharBuffer; this->seekg(1, std::ios::cur); return Str; } //读取NPK信息 std::string ReadInfo() { char* CharBuffer = new char[256]; char var; int i = 0; while (i < 256) { this->get(var); CharBuffer[i] = var ^ Key[i]; ++i; } std::string Str = CharBuffer; delete[] CharBuffer; return Str; } //读LONG int ReadLong() { char* CountBuffer = new char[8]; for (int i = 0; i < 8; i++) { this->get(CountBuffer[i]); } long Count = CharToLong(CountBuffer); delete[]CountBuffer; return Count; } //读指定长度数据 BYTE* ReadCustomSize(int Size) { BYTE* CharBuffer = new BYTE[Size]; for (int j = 0; j < Size; j++) { char var; this->get(var); CharBuffer[j] = var; } return CharBuffer; } };