在DELPHI中如何将16进制数转换成BCD码,请赐教!!!!求一示例!!
解决方案 »
- edit对输入条件的判断
- not enough actual parameters怎么解决
- 高手進來幫下小弟!有關快捷鍵的問題!!!
- 请教DELPHI的数据库驱动BDE的正确安装问题
- 日期类型字段处理问题:只要年、月部分,怎么解决?
- 万分紧急 怎么样读取memo一行中的一个字(明天我就要答辩了 )给了我所有的分
- 面视试题收集!!!!!!!
- [技术含量高]操作IE8浏览器
- 这个小问题我搞不清楚了,拜托~~
- ----散分--- 一个月不到,专家分从0到5XX,共参与了 150 个问题,有 50 个问题得分,还有若干问题未结。
- businessSkinForm 上的 bsSkinEdit 控件没有 PassWordChar 属性,怎么解决,急急
- 大家来帮我看看这个方法,
十进制转换成BCD码很简单,举例说明十进制:123
BCD码 0001 0010 0011就是将十进制单个转换成4位二进制就ok了
function ToBCD(x:integer):string;
var
sBCD:string; //压缩BCD
i :Integer;
begin
Result := '';
if x<0 then
exit;
Result := IntToStr(x); //转换成非压缩BCD码
sBCD := '';
for i:=1 to (Length(Result) div 2) do
sBCD := sBCD + Chr((StrToInt(Result[i*2-1]) shl 4)+StrToInt(Result[i*2])); Result := sBCD;
end;好像不行???
十进制转换成BCD码函数
function TForm1.inttobcd(x: Integer): string;
var
s,s1:string;
i,j,x1:Integer;
begin
s:=IntToStr(x);
i:=Length(s);
result:='';
for j:=1 to i do
begin
x1:=StrToInt(s[j]);
s1:=inttobin(x1);
s1:=Copy(s1,Length(s1)-3,4);
result:=result+s1;
end;
end;
D:\Program Files\Borland\Delphi6\Source\Indy 当然这是我机子上的路径,你需要从你的delphi安装路径里找这是函数代码
function IntToBin(Value: cardinal): string;
var
i: Integer;
begin
SetLength(result, 32);
for i := 1 to 32 do
begin
if ((Value shl (i - 1)) shr 31) = 0 then
result[i] := '0' {do not localize}
else
result[i] := '1'; {do not localize}
end;
end;
/***hex_data(<0xff,>0)****/
unsigned int HEX2BCD(unsigned char hex_data)
{
unsigned int bcd_data;
unsigned char temp;
temp=hex_data%100;
bcd_data=((unsigned int)hex_data)/100<<8;
bcd_data=bcd_data|temp/10<<4;|
bcd_data=bcd_data|temp%10;
return bcd_data;
}
如何用delphi实现上面的 函数????ji
{
unsigned int bcd_data;
unsigned char temp;
temp=hex_data%100;//取余数 delphi写法:temp=hex_data mod 100;
bcd_data=((unsigned int)hex_data)/100 < <8;//整除后左移8位 delphi写法:(hex_data div 100) shl 8
bcd_data=bcd_data|temp/10 < <4;//整除10后左移4位,然后或 delphi写法:bcd_data or ((temp div 10) shl 4)
bcd_data=bcd_data|temp%10;//取余数后或 delphi写法: bcd_data or (temp mod 10)
return bcd_data;
}
没试过,应该差不多
不过这个函数只能将一个字节的16进制数转换成可视的BCD码
function TForm1.hextobcd(s: byte): Integer;
var
bcd_data,i,j:Integer;
temp:string;
begin
i:=Ord(s);
j:=i mod 100;
temp:=inttohex(j,2);
bcd_data:=(i div 100) shl 8;
bcd_data:=bcd_data or ((StrToInt('$'+temp) div 10) shl 4);
bcd_data:=bcd_data or (StrToInt('$'+temp) mod 10);
result:=bcd_data;
end;procedure TForm1.Button3Click(Sender: TObject);
var
i:Integer;
s1,s2:string;
begin
//s1:=self.Edit1.Text;
//i:=StrToInt(s1);
i:=self.hextobcd($EB);
self.Edit2.Text:=IntToStr(i);
end;
var
Str:String;
begin
Str := IntToHex(vData,8);
try
Result := StrToInt(Str);
except
Result := vData;
end;
end;
Function ByteToBcd(vData:integer):integer; //变大
var
Str:String;
begin
Str := IntToStr(vData);
try
Result := StrToInt('$'+Str);
except
Result := vData;
end;
end;