#include <iostream>
using namespace std;
class DataConverter
{
public:
DataConverter(unsigned int numBytes) :
_startPtr(0),
_endPtr(0),
_currentPtr(0)
{
_currentPtr = _startPtr = new char[numBytes];
_endPtr = _startPtr + numBytes;
_numBytes = numBytes;
}
~DataConverter()
{
if (_currentPtr)
{
delete[]_currentPtr;
}
}
char* _startPtr;
char* _endPtr;
unsigned int _numBytes;
char* _currentPtr;
void reset()
{
_currentPtr = _startPtr;
}
inline void write1(char* ptr)
{
if (_currentPtr + 1 >= _endPtr) return;
*(_currentPtr++) = *(ptr);
}
inline void read1(char* ptr)
{
if (_currentPtr + 1 >= _endPtr) return;
*(ptr) = *(_currentPtr++);
}
inline void write2(char* ptr)
{
if (_currentPtr + 2 >= _endPtr) return;
*(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr);
}
inline void read2(char* ptr)
{
if (_currentPtr + 2 >= _endPtr) return;
*(ptr++) = *(_currentPtr++);
*(ptr) = *(_currentPtr++);
}
inline void write4(char* ptr)
{
if (_currentPtr + 4 >= _endPtr) return;
*(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr);
}
inline void read4(char* ptr)
{
if (_currentPtr + 4 >= _endPtr) return;
*(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++);
*(ptr) = *(_currentPtr++);
}
inline void write8(char* ptr)
{
if (_currentPtr + 8 >= _endPtr) return;
*(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr);
}
inline void read8(char* ptr)
{
char* endPtr = _currentPtr + 8;
if (endPtr >= _endPtr) return;
*(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++);
*(ptr) = *(_currentPtr++);
}
inline void writeChar(char c) { write1(&c); }
inline void writeUChar(unsigned char c) { write1((char*)&c); }
inline void writeShort(short c) { write2((char*)&c); }
inline void writeUShort(unsigned short c) { write2((char*)&c); }
inline void writeInt(int c) { write4((char*)&c); }
inline void writeUInt(unsigned int c) { write4((char*)&c); }
inline void writeFloat(float c) { write4((char*)&c); }
inline void writeDouble(double c)
{
write8((char*)&c);
}
inline char readChar() { char c = 0; read1(&c); return c; }
inline unsigned char readUChar() { unsigned char c = 0; read1((char*)&c); return c; }
inline short readShort() { short c = 0; read2((char*)&c); return c; }
inline unsigned short readUShort() { unsigned short c = 0; read2((char*)&c); return c; }
inline int readInt()
{
int c = 0;
read4((char*)&c);
return c;
}
inline unsigned int readUInt() { unsigned int c = 0; read4((char*)&c); return c; }
inline float readFloat() { float c = 0.0f; read4((char*)&c); return c; }
inline double readDouble() { double c = 0.0; read8((char*)&c); return c; }
};
int main()
{
DataConverter te(1024);
te.reset();
te.writeDouble(3.14);
te.writeInt(10);
te.reset();
double pai = te.readDouble();
int aa = te.readInt();
te.reset();
int a = 0;
}
C++ 数据写入char*
最新推荐文章于 2023-02-16 22:58:23 发布