C++ 数据写入char*

#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;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值