⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bcdcode.cpp

📁 C++ patterns设计模式
💻 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 + -