📄 wpackage.cpp
字号:
//#include <string.h>
//#include <stdlib.h>
//#include <stdio.h>
#include "stdafx.h"
#include "wPackage.h"
#define min(a, b) (((a) < (b)) ? (a) : (b))
#define max(a, b) (((a) > (b)) ? (a) : (b))
void CPackage::Encode(char* szBuf)
{
char buf[BUFFERSIZE+1];
int i, j;
for(i=0, j=0; i<(int)strlen(szBuf); i++) {
switch(szBuf[i]) {
case ' ':
buf[j] = '^';j++;
buf[j] = 's';j++;
break;
case '^':
buf[j] = '^';j++;
buf[j] = '^';j++;
break;
case '\r':
buf[j] = '^';j++;
buf[j] = 'r';j++;
break;
case '\n':
buf[j] = '^';j++;
buf[j] = 'n';j++;
break;
case '$':
buf[j] = '^';j++;
buf[j] = 'c';j++;
break;
case '#':
buf[j] = '^';j++;
buf[j] = 'j';j++;
break;
case '*':
buf[j] = '^';j++;
buf[j] = 'x';j++;
break;
case '\t':
buf[j] = '^';j++;
buf[j] = 't';j++;
break;
case '&':
buf[j] = '^';j++;
buf[j] = 'e';j++;
break;
default:
buf[j] = szBuf[i];j++;
break;
}
}
buf[j] = '\0';
strcpy(szBuf, buf);
}
void CPackage::Decode(char* szBuf)
{
char buf[BUFFERSIZE+1];
int i, j;
BOOL bEsc = FALSE;
for(i=0, j=0; i<(int)strlen(szBuf); i++) {
if(szBuf[i] == '^') {
bEsc = TRUE;
i++;
}
if(bEsc) {
switch(szBuf[i]) {
case 's':
buf[j] = ' ';j++;
break;
case '^':
buf[j] = '^';j++;
break;
case 'r':
buf[j] = '\r';j++;
break;
case 'n':
buf[j] = '\n';j++;
break;
case 'c':
buf[j] = '$';j++;
break;
case 'j':
buf[j] = '#';j++;
break;
case 'x':
buf[j] = '*';j++;
break;
case 't':
buf[j] = '\t';j++;
break;
case 'e':
buf[j] = '&';j++;
break;
}
bEsc = FALSE;
}
else {
buf[j] = szBuf[i]; j++;
}
}
buf[j] = '\0';
strcpy(szBuf, buf);
}
void CPackage::PushInt(char* szBuf, long lValue)
{
char szTemp[20];
char szDeli[10];
szDeli[0] = m_cDeli;
szDeli[1] = '\0';
_ltoa(lValue, szTemp, 10);
Encode(szTemp);
strcat(szBuf, szDeli);
strcat(szBuf, szTemp);
}
void CPackage::PushChar(char* szBuf, char cC)
{
char szTemp[10];
char szDeli[10];
szDeli[0] = m_cDeli;
szDeli[1] = '\0';
szTemp[0] = cC;
szTemp[1] = '\0';
Encode(szTemp);
strcat(szBuf, szDeli);
strcat(szBuf, szTemp);
}
void CPackage::PushStr(char* szBuf, char* szStr)
{
char szTemp[BUFFERSIZE];
char szDeli[10];
szDeli[0] = m_cDeli;
szDeli[1] = '\0';
if(szStr[0] == '\0') strcpy(szStr, "null");
strcpy(szTemp, szStr);
Encode(szTemp);
strcat(szBuf, szDeli);
strcat(szBuf, szTemp);
}
void CPackage::PushFloat(char* szBuf, double dValue)
{
char szTemp[BUFFERSIZE];
char szDeli[10];
szDeli[0] = m_cDeli;
szDeli[1] = '\0';
::sprintf(szTemp, "%.2lf", dValue);
//_gcvt(dValue, 3, szTemp);
Encode(szTemp);
strcat(szBuf, szDeli);
strcat(szBuf, szTemp);
}
int CPackage::PullInt(char* szBuf, long* lValue)
{
char szTemp[21];
int i;
BOOL bFinish; // Check has reach the tail of the package
i = FindDeli(szBuf, &bFinish);
if(i == 0) {
*lValue = 0;
return NODATA;
}
if(i > 20) i = 20;
StrnCpy(szTemp, szBuf, i);
Decode(szTemp);
if(stricmp(szTemp, "null") == 0) *lValue = 0;
else *lValue = atol(szTemp);
StrPack(szBuf, i);
return i;
}
int CPackage::PullChar(char* szBuf, char* cC)
{
char szTemp[20];
int i;
BOOL bFinish;
i = FindDeli(szBuf, &bFinish);
if(i == 0) {
*cC = 0;
return NODATA;
}
StrnCpy(szTemp, szBuf, i);
if(stricmp(szTemp, "null") == 0) *cC = ' ';
else *cC = szTemp[0];
StrPack(szBuf, i);
return i;
}
int CPackage::PullStr(char* szBuf, char* szStr, int nBufferSize)
{
char szTemp[BUFFERSIZE];
int i;
BOOL bFinish; // Check has reach the tail of the package
TrimNewLine(szBuf);
Trim(szBuf);
i = FindDeli(szBuf, &bFinish);
if(i == 0) {
strcpy(szStr, "");
return NODATA;
}
StrnCpy(szTemp, szBuf, i);
Decode(szTemp);
if(stricmp(szTemp, "null") == 0) strcpy(szStr, "");
else StrnCpy(szStr, szTemp, min(i, nBufferSize));
StrPack(szBuf, i);
return i;
}
int CPackage::PullFloat(char* szBuf, double* lValue)
{
char szTemp[30];
int i;
BOOL bFinish; // Check has reach the tail of the package
i = FindDeli(szBuf, &bFinish);
if(i == 0) {
*lValue = 0;
return NODATA;
}
StrnCpy(szTemp, szBuf, i);
Decode(szTemp);
if(stricmp(szTemp, "null") == 0) *lValue = 0;
else *lValue = atof(szTemp);
StrPack(szBuf, i);
return i;
}
//-----------------------------------------------------------
void CPackage::PushInt(char* szBuf, long lValue, char cDeli)
{
char szTemp[20];
char szDeli[10];
szDeli[0] = cDeli;
szDeli[1] = '\0';
_ltoa(lValue, szTemp, 10);
Encode(szTemp);
strcat(szBuf, szDeli);
strcat(szBuf, szTemp);
}
void CPackage::PushChar(char* szBuf, char cC, char cDeli)
{
char szTemp[10];
char szDeli[10];
szDeli[0] = cDeli;
szDeli[1] = '\0';
szTemp[0] = cC;
szTemp[1] = '\0';
Encode(szTemp);
strcat(szBuf, szDeli);
strcat(szBuf, szTemp);
}
void CPackage::PushStr(char* szBuf, char* szStr, char cDeli)
{
char szTemp[BUFFERSIZE];
char szDeli[10];
szDeli[0] = cDeli;
szDeli[1] = '\0';
if(szStr[0] == '\0') strcpy(szStr, "null");
strcpy(szTemp, szStr);
Encode(szTemp);
strcat(szBuf, szDeli);
strcat(szBuf, szTemp);
}
void CPackage::PushFloat(char* szBuf, double dValue, char cDeli)
{
char szTemp[BUFFERSIZE];
char szDeli[10];
szDeli[0] = cDeli;
szDeli[1] = '\0';
::sprintf(szTemp, "%.2lf", dValue);
//_gcvt(dValue, 3, szTemp);
Encode(szTemp);
strcat(szBuf, szDeli);
strcat(szBuf, szTemp);
}
int CPackage::PullInt(char* szBuf, long* lValue, char cDeli)
{
char szTemp[21];
int i;
BOOL bFinish; // Check has reach the tail of the package
i = FindDeli(szBuf, &bFinish, cDeli);
if(i == 0) {
*lValue = 0;
return NODATA;
}
if(i > 20) i = 20;
StrnCpy(szTemp, szBuf, i);
Decode(szTemp);
if(stricmp(szTemp, "null") == 0) *lValue = 0;
else *lValue = atol(szTemp);
StrPack(szBuf, i);
return i;
}
int CPackage::PullChar(char* szBuf, char* cC, char cDeli)
{
char szTemp[20];
int i;
BOOL bFinish;
i = FindDeli(szBuf, &bFinish, cDeli);
if(i == 0) {
*cC = 0;
return NODATA;
}
StrnCpy(szTemp, szBuf, i);
if(stricmp(szTemp, "null") == 0) *cC = ' ';
else *cC = szTemp[0];
StrPack(szBuf, i);
return i;
}
int CPackage::PullStr(char* szBuf, char* szStr, int nBufferSize, char cDeli)
{
char szTemp[BUFFERSIZE];
int i;
BOOL bFinish; // Check has reach the tail of the package
TrimNewLine(szBuf);
Trim(szBuf);
i = FindDeli(szBuf, &bFinish, cDeli);
if(i == 0) {
strcpy(szStr, "");
return NODATA;
}
StrnCpy(szTemp, szBuf, i);
Decode(szTemp);
if(stricmp(szTemp, "null") == 0) strcpy(szStr, "");
else StrnCpy(szStr, szTemp, min(i, nBufferSize));
StrPack(szBuf, i);
return i;
}
int CPackage::PullFloat(char* szBuf, double* lValue, char cDeli)
{
char szTemp[30];
int i;
BOOL bFinish; // Check has reach the tail of the package
i = FindDeli(szBuf, &bFinish, cDeli);
if(i == 0) {
*lValue = 0;
return NODATA;
}
StrnCpy(szTemp, szBuf, i);
Decode(szTemp);
if(stricmp(szTemp, "null") == 0) *lValue = 0;
else *lValue = atof(szTemp);
StrPack(szBuf, i);
return i;
}
//-----------------------------------------------------------
int CPackage::FindDeli(char* szBuf, int* bFinish, char cDeli)
{
int i, j;
*bFinish = FALSE;
for(j=0; ;j++) {
if(szBuf[j] == '\n' || szBuf[j] == '\0') return 0;
if(szBuf[j] != cDeli) {
if(j != 0) StrPack(szBuf, j);
break;
}
}
for(i=0 ; ; i++) {
if(szBuf[i] == cDeli) {
return i;
}
if(szBuf[i] == '\n' || szBuf[i] == '\0') {
*bFinish = TRUE;
return i;
}
}
}
int CPackage::FindDeli(char* szBuf, int* bFinish)
{
return FindDeli(szBuf, bFinish, m_cDeli);
}
char* CPackage::StrnCpy(char* szDest, char* szSour, int nLen)
{
strncpy(szDest, szSour, nLen);
szDest[nLen] = '\0';
return szDest;
}
void CPackage::StrPack(char* szSour, int nLen)
{
strcpy(szSour, &szSour[nLen]);
}
int CPackage::PackageEnd(char* szBuff, int* nLen)
{
int i;
for(i=0; i<*nLen; i++) {
if(szBuff[i] == '\n') {
*nLen = i+1;
szBuff[i+1] = '\0';
return FINISH;
}
}
szBuff[*nLen+1] = '\0';
return NOFINISH;
}
int CPackage::FindFinish(char* szBuff, int nLen, int* nPos)
{
int i;
for(i=0; i<nLen; i++) {
if(szBuff[i] == '\n') {
*nPos = i+1;
return FINISH;
}
}
return NOFINISH;
}
BOOL CPackage::GetPackage(char* szSour, char* szDest)
{
int nN, nLen;
nLen = strlen(szSour);
for(nN=0; nN<nLen; nN++) {
if(szSour[nN] == '\n') {
StrnCpy(szDest, szSour, nN+1);
if(nLen == nN+1) {
szSour[0] = '\0';
}
else {
strcpy(szSour, &szSour[nN+1]);
}
return TRUE;
}
}
return FALSE;
}
void CPackage::TrimNewLine(char* szStr)
{
int i;
for(i=0; i<(int)strlen(szStr); i++) {
if(szStr[i] == '\n' || szStr[i] == '\r') szStr[i] = ' ';
}
}
void CPackage::InitBuf(char* szBuf)
{
szBuf[0] = '\0';
}
void CPackage::SetPackageEnd(char* szBuf)
{
::strcat(szBuf, " \r\n");
}
void CPackage::Trim(char* szStr)
{
//char* szTemp;
char szTemp[20480];
int i, j; //, lLen;
BOOL bChar = FALSE;
//lLen = ::strlen(szStr)+2;
//szTemp = new char[lLen];
for(i=::strlen(szStr)-1; i>= 0; i--) {
if(szStr[i] == ' ') szStr[i] = '\0';
else break;
}
for(i=0, j=0; i<=(int)::strlen(szStr); i++) {
if(!bChar && szStr[i] != ' ') bChar = TRUE;
if(bChar) {
szTemp[j] = szStr[i]; j++;
}
}
::strcpy(szStr, szTemp);
//delete[] szTemp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -