📄 bcdcode.cpp
字号:
////////////////////////////////////////////////////////////////////////////////
// BCD压缩编码方法
////////////////////////////////////////////////////////////////////////////////
// Author : 黎达文
// Description : 实现BCD压缩编码方法
//
// Version : 1.0
//
// Standard include files : std_inc.hpp(by precompile header)
//
// Start Date : 2003年6月20日
//
// Change Log :
// 2003年6月20日 by 黎达文
// -- Created
////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "bcdcode.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
namespace stk
{
//////////////////////////////////////////////////////////////////////////////
// Function Name : Encode
// Author : Darkay Li
// Description : encode string to BCD format
// Input Parameters : str -- string
// bcd -- encoded BCD string, it may not c-string,
// so use begin()/end() instead c_str
// Return Value : none
// Ext Function called : none
// Start Date : 2003年5月7日
// Change log : 2003年5月7日 by Darkay Li -- Created
//////////////////////////////////////////////////////////////////////////////
void BcdCode::encode(const char* str, std::string& bcd)
{
assert(str);
unsigned char bcd1 = 0;
unsigned char bcd2 = 0;
size_t size = strlen(str);
//process [0..size-1)
for(size_t i=0; i<size-1; i+=2)
{
assert(isdigit(str[i]));
assert(isdigit(str[i+1]));
bcd1 = (str[i] - '0');
bcd2 = (str[i+1] - '0');
bcd.push_back(bcd2<<4 | bcd1);
}
//last part string
//for odd size digit string, fill the most significant with FILL_FLAG
if(size & 0x1)
{
bcd1 = str[size-1];
bcd2 = FILL_FLAG;
bcd.push_back(bcd2<<4 | bcd1);
}
}
//////////////////////////////////////////////////////////////////////////////
// Function Name : Decode
// Author : Darkay Li
// Description : decode bcd stream to string
// Input Parameters : bcd -- bcd code stream
// length -- the length of bcd code stream
// str -- decoded string
// Return Value :
// Ext Function called :
// Start Date : 2003年5月7日
// Change log : 2003年5月7日 by Darkay Li -- Created
//////////////////////////////////////////////////////////////////////////////
void BcdCode::decode(const char* bcd, size_t length, std::string& str)
{
char ch1;
char ch2;
for(size_t i=0; i<length-1; i++)
{
ch1 = (bcd[i] & 0x0F);
ch2 = (bcd[i]>> 4) & 0x0F;
str.push_back(ch1+'0');
str.push_back(ch2+'0');
}
//the last one
ch1 = (bcd[i] & 0x0F);
ch2 = (bcd[i]>> 4) & 0x0F;
str.push_back(ch1+'0');
if(ch2 != FILL_FLAG)
str.push_back(ch2+'0');
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -