📄 buffer.h
字号:
/**
* buffer.h
*
* Short Message Abstractive Library.(SMAL)
*
* Copyright 2003-2006 北京风起水流软件工作室
*
* http://www.zealware.com
*
* princetoad@gmail.com
*
*/
#ifndef _SMAL_BUFFER_H
#define _SMAL_BUFFER_H
#include <smal.h>
class CBuffer {
public:
CBuffer(int sz = DefaultBufferSize)
: _size(sz), m_nLen(0) {
m_str = new char[sz];
ZeroMemory(m_str, sz);
}
~CBuffer() {
delete[] m_str;
m_str = NULL;
}
const char * GetBuffer() {
return m_str;
}
int GetBufLen() {
return m_nLen;
}
/** 设置buffer的内容,n1=TotalLength, n2=CommandID, n3=SeqID, pchData=MsgBody, nLen=sizeof(MsgBody).
适用于CMPP,SGIP,SMGP
*/
void SetBuffer(unsigned long nStart, unsigned long nTotalLength, unsigned long nCommandId, unsigned long nSeqId, void* pvData = NULL, unsigned long nLen = 0) {
if ( (int)nLen > (_size - 12)) {
delete[] m_str;
m_str = NULL;
m_str = new char[nLen + 12];
}
CopyMemory(m_str + nStart, &nTotalLength, 4);
CopyMemory(m_str + nStart + 4, &nCommandId, 4);
CopyMemory(m_str + nStart + 8, &nSeqId, 4);
if (pvData != NULL) {
CopyMemory(m_str + nStart +12, pvData, nLen);
}
m_nLen = nStart + 12 + nLen;
}
/**设置buffer的内容
n1=TotalLength, n2=CommandID, n3=command_status, n4=SeqID, pchData=MsgBody, nLen=sizeof(MsgBody).
(适用于CNGP)
*/
void SetBuffer(
unsigned long nStart, ///< buffer起始位置
unsigned long nTotalLength, ///< total_length
unsigned long nCommandId, ///< command_id
unsigned long nCommandStatus, ///< command_status
int nSeqId, ///< sequence_id
void* pvData = NULL, ///< message body
int nLen = 0 ///< length of message body
)
{
CopyMemory(m_str + nStart, &nTotalLength, 4);
CopyMemory(m_str + nStart + 4, &nCommandId, 4);
CopyMemory(m_str + nStart + 8, &nCommandStatus, 4);
CopyMemory(m_str + nStart + 12, &nSeqId, 4);
if (pvData != NULL) {
CopyMemory(m_str + nStart + 16, pvData, nLen);
}
m_nLen = nStart + 16 + nLen;
}
// 增加一段内容.
// 可以是byte, word, dword,等二进制数据
void Add(void* pvData, int nLen) {
//增加了对pvData是否为空的判断.
if (AfxIsValidAddress(pvData, nLen, FALSE)) {
CopyMemory(m_str + m_nLen, pvData, nLen);
}
m_nLen += nLen;
}
// 以Null结尾的ASCII字符串
void AddString(const char * pvData) {
strcpy(m_str + m_nLen, pvData);
m_nLen += strlen(pvData);
m_str[m_nLen] = '\0';
m_nLen += 1;
}
private:
static const int DefaultBufferSize = 1024;
char *m_str; ///< 指向buffer的指针
int m_nLen; ///< 当前buffer的有效长度.
int _size; ///< buffer总长度
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -