惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
罗磊的独立博客
腾讯CDC
云风的 BLOG
云风的 BLOG
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
U
Unit 42
I
InfoQ
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
美团技术团队
IT之家
IT之家
Stack Overflow Blog
Stack Overflow Blog
F
Fortinet All Blogs
GbyAI
GbyAI
S
SegmentFault 最新的问题

博客园 - tecsun

Base64 Encode and Decode - BCB[转] BCB 控制 Excel类[转] char * 与 wchar_t *(BSTR) 转换 Borland IDE 常用热键简介 WINXP总是默认以Administrator登陆系统,怎样让自建用户启动 [轉]MD5算法(C++实现) [轉]MYSQL 字符集问题 [轉]mysql多种存储引擎及特点 MySQL date/time 不能转换为 System.DateTime的问题[VS2005(C#)+mysql] mysql 相关 [转]写得蛮好的linux学习笔记 VS2005中使用mysql 在ubuntu下使用qq[转] [轉自ccrun by dewbow ] BCB和TTS5.1做中文语音 分割字符串(BCB)(從文本文檔中取出需要的字符串) [轉]我们必须了解的8个dos命令(转自http://www.hxblog.net/article.asp?id=491) [C#][轉]字符转ASCII码,ASCII码转字符 控制外部應用程式的一些記錄(C++) [轉]窗口句柄的获得
[C++]BCD碼轉換問題
tecsun · 2007-01-23 · via 博客园 - tecsun

最近在做一個與硬件串口通信項目,發現碼制轉換問題非常重要,
師傅給我了幾個關於BCD碼轉換的函數。
做個記錄先。
//char:String.c_str()
AnsiString TForm1::BCD_to_AnsiString(char * P_BCD, int length)
{
    //TODO: Add your source code here
    AnsiString returnstring = "";
    char high_char,low_char,temp;
    for( int i=0;i<length;i++ )
    {
        temp = *P_BCD++;
        high_char = (temp&0xf0)>>4;
        low_char = temp&0x0f;

        if( (high_char>=0x00)&&(high_char<=0x09) )
            high_char+=0x30;

        if( (high_char>=0x0A)&&(high_char<=0x0F) )
            high_char+=0x37;

        if( (low_char>=0x00)&&(low_char<=0x09) )
            low_char+=0x30;
        if( (low_char>=0x0A)&&(low_char<=0x0F) )
            low_char+=0x37;

        returnstring += AnsiString(high_char);
        returnstring += AnsiString(low_char);
        returnstring += " ";
    }
    return returnstring;
}

//-------------------------------------------------------------------------------------------------------------------------

AnsiString __fastcall TMenuForm::AnsiString_To_BCD( char * P_BCD, int length )
{
    AnsiString returnstring ;
    char high_char,low_char,temp;

    for( int i=0;i<length;i++ )
    {
        temp        =   *P_BCD++;
        high_char   =   (temp&0xf0)>>4;
        low_char    =   temp&0x0f;

        if(     (high_char>=0x00)
            &&  (high_char<=0x09)
          )
        {
            high_char+=0x30;
        }

        if(     (high_char>=0x0A)
            &&  (high_char<=0x0F)
          )
        {
            high_char+=0x37;
        }

        if(     (low_char>=0x00)
            &&  (low_char<=0x09)
          )
        {
            low_char+=0x30;
        }
        if(     (low_char>=0x0A)
            &&  (low_char<=0x0F)
          )
        {
            low_char+=0x37;
        }

        returnstring += AnsiString( high_char );
        returnstring += AnsiString( low_char );
    }
    return returnstring;
}
//------------------------------------------------------------------------------------------------------------------------------------------
//十進制轉為BCD
int __fastcall TForm1::ConvertBCD(int dnum)
{
  int  bcdval=0;
  if( dnum>9999 || dnum < 0 )   return   -1;  
  bcdval   =   (( (dnum/1000)*16+(dnum%1000)/100)*16+(dnum%100)/10   )*16 + dnum%10;
  return   bcdval;  
}
//------------------------------------------------------------------------------------------------------------------------------------------
//BCD轉為十進制
StrToInt("0x"+BCD_String);
//--------------------------------------------------------------------------------------------------------------------------------------------
再附一個時間延遲函數
//---------------------------------------------------------------------------
//時間延遲函數,單位是毫秒
void __fastcall TForm1::Delay(DWORD DT)
{
    DWORD BeginTime;

    BeginTime = GetTickCount();
    do
    {
        Application->ProcessMessages();
    }while( GetTickCount() - BeginTime <= DT );
}
//---------------------------------------------------------------------------