c++ 转bcd码_C++ BCD转码问题 | 学步园

本文介绍了一种将BCD码转换为AnsiString字符串的方法,并提供了将字符串转换回BCD码的逆过程实现。此外,还展示了如何进行十进制与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

{

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

{

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 );

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值