编程实例:
CDataBuffer.h
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
// typedef signed char int8_t;
// typedef signed short int16_t;
// typedef signed int int32_t;
// typedef signed long long int64_t;
// typedef unsigned char uint8_t;
// typedef unsigned short uint16_t;
// typedef unsigned int uint32_t;
// typedef unsigned long long uint64_t;
static bool LittleEndian = false;
class CDataBuffer
{
public:
CDataBuffer()
{
pstart = pend = pdata = pfree = NULL;
}
virtual ~CDataBuffer()
{
if(pstart)
free(pstart);
pstart = pend = pdata = pfree = NULL;
}
int getDataLen()
{
return (pfree - pdata);
}
char* getData()
{
return (char*)pdata;
}
char* getFree()
{
return (char*)pfree;
}
int getFreeLen()
{
return (pend - pfree);
}
void pourData(int len)
{
pfree += len;
}
void stripData(int len)
{
pfree -= len;
}
void clear()
{
pdata = pfree = pstart;
}
void writeInt8(uint8_t n)
{
expend(1);
if(LittleEndian)
{
memcpy(pfree, &n, sizeof(n));
}
else
{
pfree[0] = n & 0xff;
}
pfree += 1;
}
void writeInt16(uint16_t n)
{
expend(2);
if(LittleEndian)
{
memcpy(pfree, &n, sizeof(n));
}
else
{
pfree[0] = n & 0xff;
pfree[1] = (n >> 8) & 0xff;
}
pfree += 2;
}
void writeInt32(uint32_t n)
{
expend(4);
if(LittleEndian)
{
memcpy(pfree, &