我该用什么命令???????????????????????我已经没有可用积分了!没有人能帮我吗? (20分)

  • 主题发起人 主题发起人 txyx
  • 开始时间 开始时间
T

txyx

Unregistered / Unconfirmed
GUEST, unregistred user!
想把一个字符串类似于0052H012AH006CH这样的十六进制东东转换为十进制字符串?
 
给你一个!

任意进制转换

const MinBase = 2

MaxBase = 36


function NumToStr (num, len, base: Integer
neg: Boolean

fill: char): string

// num = 要转换的数
// len = 生成字符串的最小长度

// base = 进制数 2 = 二进制
// neg = 是否允许负数

// fill = 填充字符用于补满字符串长度//
// 用法:
// NumToStr (45, 8, 2, false, ''0'') > ''00101101''
// NumToStr (45, 4, 8, false, ''0'') > ''0055''
// NumToStr (45, 4, 10, false, '' '') > '' 45''
// NumToStr (45, 4, 16, false, ''0'') > ''002D''
// NumToStr (45, 0, 36, false, '' '') > ''19''
//
var s: string

digit: Integer

begin
num:= ABS (num)

if ((base >= MinBase) and (base <= MaxBase)) then begin
s:= ''''

repeat
digit:= num mod base

if digit < 10 then Insert (CHR (digit + 48), s, 1)
else Insert (CHR (digit + 55), s, 1)

num:= num div base

until num = 0

if neg then Insert (''-'', s, 1)

while Length(s) < len do Insert (fill, s, 1)

end

Result:= s

end

 
找到H的位置,然后把前面的部分截出来,Delphi中十六进制是$开头的
用pos,copy等函数
 
如果我没有猜错的话,你的 0052H012AH006CH 是每五个字符为一组十六进制字符即:
0052H - 1
012AH - 2
006CH - 3
我给你一个函数,就是你送入象上面1,2,3形式的字符串将返回象如下形式的十进制形式
的字符串:
82D - 1
298D - 2
108D - 3

function HexStr2DecStr( hs : string):string;
const
HEXCHAR = '0123456789ABCDEF';
var
tmpstr:string;
i,hslen,charpos,ret:WORD;
begin
result:='';
ret:=0;
hslen:=length(hs);
for i:=1 to hslen - 1 do //except char ' H '
begin
tmpstr:=copy(hs,i,1);
tmpstr:=uppercase(tmpstr);
charpos:=pos(tmpstr,HEXCHAR);
if charpos=0 then raise exception.create('Not HEX char found!')
else
begin
dec(charpos);
ret:=ret + charpos shl ( ( (hslen -1) - i ) * 4 );
end;
end;
result:= inttostr(ret)+'D';
end;

我想有了这个函数,一切就变得简单了吧?
函数调试通过。
 
下面函数功能更强大:
function HexStrToInt(HexStr: string): int64;
var counter: integer;
begin
Result := 0;
for counter := 1 to length(HexStr) do
Result := Result + pow(16, length(HexStr) - counter) * HexCharToInt(HexStr[Counter]);
end;

function HexCharToInt(HexToken: char): Integer;
begin
Result := 0;
HexToken := UpCase(HexToken);
if (HexToken > #47) and (HexToken < #58) then
Result := Ord(HexToken) - 48
else if (HexToken > #64) and (HexToken < #71) then
Result := Ord(HexToken) - 65 + 10;
end;

function pow(base, power: integer): int64;
var counter: integer;
begin
Result := 1;
for counter := 1 to power do
Result := Result * base;
end;

调用方法:
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := IntToStr(HexStrToInt(Edit1.Text));
//Edit1.Text是一个由十六进制字符组成的字符串,必须小于等于7FFFFFFFFFFFFFFF(即2^63)
end;
 
楼上的师兄们。方法太烦了:[:)][:)]
function HexStrToInt(const S: string): Integer;
var
E:Integer;
begin
Val('$'+S, Result, E);
end;
 
多人接受答案了。
 

Similar threads

回复
0
查看
848
不得闲
回复
0
查看
1K
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部