关于进制转换的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 song188521
  • 开始时间 开始时间
S

song188521

Unregistered / Unconfirmed
GUEST, unregistred user!
哪位高手能告诉我怎么样把十六进制的数转换成十进制的数。最好有例子
 
哪位高手能告诉我怎么样把十六进制的数转换成十进制的数。最好有例子
 
function _HexaToDecimal(Hexa:String):longint;
//十六进制转十进制
const
ValoresHexa: Array['A'..'F'] Of Integer = (10,11,12,13,14,15);
Var
nDecimal : longint;
nIndex : byte;
begin
nDecimal := 0;
Hexa := UpperCase(Hexa);
For nIndex := Length(Hexa)do
wnTo 1do
If Hexa[nIndex] In ['0'..'9'] then
nDecimal := nDecimal + StrToInt(Hexa[nIndex]) * Trunc(Exp((Length(Hexa)-nIndex)*ln(16)))
else
nDecimal:=nDecimal + ValoresHexa[Hexa[nIndex]] * Trunc(Exp((Length(Hexa)-nIndex)*ln(16)));
Result:=nDecimal;
end;
 
为什么超过4位的十六进制数就有准了呢?
 
不好意思是“不准”我是用计算机器来校对的
 
全部给你了,主要是前两个,后面都以前面2个为基础:
function OcttoBin(i: integer): string;
//十进制转换为二进制字符串
var
j: integer;
s: string;
begin
j := i;
s := ' ';
while j >= 2do
begin
if (j mod 2) = 1 then
begin
s := '1' + s;
j := j div 2;
end
else
begin
s := '0' + s;
j := j div 2;
end;
end;
s := chr(ord('0') + j) + s;
result := s;
end;

function BintoOct(k: string): integer;
//二进制字符串转换为十进制
var
i, j, t: integer;
s: char;
begin
t := 1;
j := length(k);
j := 0 + (ord(k[j]) - ord('0')) * t;
;
for i := length(k) - 1do
wnto 1do
begin
s := k;
t := t * 2;
j := j + ((ord(s) - ord('0')) * t);
end;
result := j;
end;

function OcttoHex(i: integer): string;
//十进制转换为四位的十六进制字符串
begin
result := InttoHex(i, 4);
end;

function HextoOct(k: string): integer;
//十六进制字符串转换为十进制数
begin
result := StrtoInt('$' + k);
end;

function HextoBin(k: string): string;
//十六进制字符串转换为二进制字符串
begin
result := OcttoBin(HextoOct(k));
end;

function BintoHex(k: string): string;
//二进制字符串转换为四位的十六进制字符串
begin
result := Octtohex(BintoOct(k));
end;
 
话题100522的标题是: 如何将十六进制转换成十进制? (100分)
分类:非技术问题 jun (1999-02-09 10:06:00)
如何将十六进制转换成十进制?
如 Edit1.text 内的A(十六进制)转换成 edit2.text 的10 十进制
能否直接定义 'H' 为十六进制的类。
注:D3 下运行。

delphi fan2 (1999-02-09 10:38:00)
自己写一个也不复杂!
function convert(s:string):integer
begin
len:=length(s);
for i:=lendo
wnto 1do
begin
r:=power(16,len-i)*value();//value把字符作相应的变换,如:'1'-1;'a'-10
end;
end;


chenke (1999-02-09 13:46:00)
更简单用
Edit2.Text:=Format('%d',[StrtoInt(Edit1.Text)]);
不用StrToInt函数说不定也可以。

chenke (1999-02-09 13:47:00)
oh,sorry,
Edit2.Text:=Format('%d',[StrtoInt('$'+Edit1.Text)]);

CJ (1999-02-09 21:29:00)
to chenke:Ok but u must note if there is a 'H' and it is a valid Hex
Number

redforks (1999-02-10 21:28:00)
function chValue(ch: char): integer;
//ch的大小
begin
if ch in ['0'..'9'] then
result := ord(ch) - ord('0')
else
if ch in ['A'..'Z'] then
result := ord(ch) - ord('A') + 10
else
assert(false);
end;

function HexStrToInt(str: String): integer;
//转换16进制字符串
var
i: integer;
len: integer;
begin
str := upperCase(str);
len := length(str);
for i := lendo
wnto 1do
result := Trunc(power(16, len - i)) * chValue(str);
end;

function StrToInt2(str: String): integer;
//转换
begin
str := Trim(str);
if (LastDelimiter('Hh', str) <> 0) and (LastDelimiter('Hh', str) <> Length(str)) then
//非法格式
raise EConvertError.Create('格式不对')
else
if LastDelimiter('Hh', str) = Length(str) then
//Hex
result := HexStrToInt(Copy(str, 1, Length(str) -1))
else
//Dec
result := StrToInt(str);
end;


jun (1999-02-12 10:35:00)
多人接受答案了。

liuming (1999-02-12 22:21:00)
我认为: chenke 的方法非常好并且最简单,
提问者的意思是,输入的确 HEX ,ENTER 之后,在另一框显示是 DEC

chenke-40,redforks-60,的回答最终被接受。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3188479
关于进制转换的一些问题
 
To song188521,
http://www.delphibbs.com/keylife/iblog_show.asp?xid=13396
看看吧
 
最简单的方法:
var hn:integer;
begin
if edit1.text<>''then
//edit1输入十六进制编码
begin
hn:=strtoint('$'+edit1.text);
edit2.text:=inttostr(hn);//edit2输出十进制编码
end;
end;
 
//16 -> 10 10 -> 16
//16 -> 10:
I := StrToInt('$ABCD');
//10 -> 16:
Hex := IntToHex(1234, 2)
 
后退
顶部