请问,16进制与10进制如何转换???(null)(50分)

  • 主题发起人 主题发起人 yxyyyy
  • 开始时间 开始时间
Y

yxyyyy

Unregistered / Unconfirmed
GUEST, unregistred user!
16进制与10进制如何转换???
 
这是很早以前,编写条码打印程序时写的一个十进制转十六进制的程序了,
你看看能用吗?它是以字符串的形式转换的。
回头看看计算机原理,就会发现这不难的。

Function TFrmTMprint.strtohexd( var str:string):String;
var
i:integer;
ss:string;
begin
ss:='';
if (length(str) mod 4)<>0 then
begin
for i:=1 to (4-(length(str) mod 4)) do
str:='0'+str;
end;
if ((length(str) div 4) mod 2)<>0 then
str:='0000'+str;
for i:=0 to (length(str) div 4) do
begin
//copy(str,1*4,1)*8+
IF copy(str,i*4,4)='0000' then
ss:=ss+'0';
IF copy(str,i*4,4)='0001' then
ss:=ss+'1';
IF copy(str,i*4,4)='0010' then
ss:=ss+'2';
IF copy(str,i*4,4)='0011' then
ss:=ss+'3';
IF copy(str,i*4,4)='0100' then
ss:=ss+'4';
IF copy(str,i*4,4)='0101' then
ss:=ss+'5';
IF copy(str,i*4,4)='0110' then
ss:=ss+'6';
IF copy(str,i*4,4)='0111' then
ss:=ss+'7';
IF copy(str,i*4,4)='1000' then
ss:=ss+'8';
IF copy(str,i*4,4)='1001' then
ss:=ss+'9';
IF copy(str,i*4,4)='1010' then
ss:=ss+'A';
IF copy(str,i*4,4)='1011' then
ss:=ss+'B';
IF copy(str,i*4,4)='1100' then
ss:=ss+'C';
IF copy(str,i*4,4)='1101' then
ss:=ss+'D';
IF copy(str,i*4,4)='1110' then
ss:=ss+'E';
IF copy(str,i*4,4)='1111' then
ss:=ss+'F';
end;
strtohexd:='80'+inttohex(((length(str) div 4) div 2),2)+ ss;
end;
 

function IntToHex(Value: Integer
Digits: Integer): string
overload;
function IntToHex(Value: Int64
Digits: Integer): string
overload;
Description

IntToHex converts a number into a string containing the number's hexadecimal (base 16) representation.
Value is the number to convert.
Digits indicates the minimum number of hexadecimal digits to return.
 
如果是数值类型,就无所谓十进制十六进制,直接用就行了
如果是字符串,这才有了区别,
十六进制数的字符串形式转化成十进制数的字符串形式,我是查表处理的,

TTab=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
再对照位数和位置得到真实值,
再用inttostr得到结果。
 
同意4.13,是DELPHI自己的函数,应该在速度和可靠上有保证得
 
4.13对
如下:
result := 0
for i := Lenght( HexStr ) downto 1 do
begin
case HexStr of
'0'..'9' : result := result *16 + strToInt( HexStr )
'a','A' : result := result *16 + 10
......
end
end

ok?
 
多人接受答案了。
 
后退
顶部