Conversões comuns em Delphi
Autor:lyboy99
e-mail:[email protected]
URL: http://hnh.126.com
Fornece vários métodos de conversão comumente usados e suas funções de conversão
Espero que ajude você
1.HEX -> Inteiro
2.2.Dezembro para HEX
3.ASCII para HEX/matemática
4.Binário para decimal
================================================= ============
1.HEX -> Inteiro
================================================= ============
Método.1
-------------------------------------------------- ----------------------------------
var
eu: inteiro
s: sequência;
começar
s := '$' + ThatHexString;
eu := StrToInt(a);
fim;
-------------------------------------------------- ----------------------------------
Método.2
-------------------------------------------------- ----------------------------------
CONST HEX: ARRAY['A'..'F'] DE INTEGER = (10,11,12,13,14,15);
VARstr: String;
Internacional,
eu: inteiro;
COMEÇAR
READLN(str);
Int := 0;
FOR i := 1 TO Comprimento (str) DO
SE str[i] < 'A' THEN Int := Int * 16 + ORD(str[i]) - 48
ELSE Int := Int * 16 + HEX[str[i]];
ESCREVER(Int);
LEIA;
FIM.
================================================= =
2.Dezembro para HEX
-----------------------------------------------
HexString := Formato('%0x',DecValue);
-----------------------------------------------
================================================= ==
3.ASCII para HEX/matemática
--------------------------
unidade Hexstr;
interface
usa String16, SysUtils;
Tipo
PByte = ^BYTE;
PRocedure BytesToHexStr(var hHexStr: String; pbyteArray: PByte; InputLength: Word);
procedimento HexStrToBytes(hHexStr: String; pbyteArray: Ponteiro);
procedimento HexBytesToChar(var Resposta: String; hexbytes: PChar; InputLength: WORD);
implementação
procedimento BytesToHexStr(var hHexStr: String; pbyteArray: PByte; InputLength: WORD);
Const.
HexChars: Matriz[0..15] de Char = '0123456789ABCDEF';
var
eu, j: PALAVRA;
começar
SetLength(hHexStr, (InputLength * 2));
FillChar(hHexStr, sizeof(hHexStr), #0);
j:= 1;
para i := 1 para InputLength comece
hHexStr[j] := Char(HexChars[pbyteArray^ shr 4]);
hHexStr[j] := Char(HexChars[pbyteArray^ e 15]);
inc(pbyteArray);
fim;
fim;
procedimento HexBytesToChar(var Resposta: String; hexbytes: PChar; InputLength: WORD);
var
eu: PALAVRA;
c: byte;
começar
SetLength(Resposta,InputLength);
FillChar(Resposta, SizeOf(Resposta), #0);
para i := 0 to (InputLength - 1) comece
c := BYTE(hexbytes[i]) E BYTE($f);
se c > 9 então
Inc (c, $ 37)
outro
Inc(c, $30);
Resposta[i + 1] := char(c);
fim;{para}
fim;
procedimento HexStrToBytes(hHexStr: String; pbyteArray: Ponteiro);
{pbyteArray deve apontar para memória suficiente para armazenar a saída}
var
eu, j: PALAVRA;
temPPTr: PChar;
doisDígitos: String[2];
começar
tempPtr :=pbyteArray;
j:= 1;
para i := 1 to (Length(hHexStr) DIV 2) comece
doisDígitos := Copiar(hHexStr, j, 2);
PByte(tempPtr)^ := StrToInt('$' + doisDigits Inc(tempPtr);
fim;{para}
fim;
fim.
-------------------------------------------------- ----------------------------------
-------------------------------------------------- ----------------------------------
UNIDADE String16.
interface
{$IFNDEFWin32}
procedimento SetLength(var S: string; Len: Inteiro);
procedimento SetString(var Dst: string; Src: PChar; Len: Inteiro);
{$ENDIF}
implementação
{$IFNDEFWin32}
procedimento SetLength(var S: string; Len: Inteiro);
começar
se Len > 255 então
S[0] := Chr(255)
outro
S[0] := Chr(Len)
fim;
procedimento SetString(var Dst: string; Src: PChar; Len: Inteiro);
começar
se Len > 255 então
Mover(Src^, Dst[1], 255)
outro
Mover(Src^, Dst[1], Len);
SetComprimento(Dst, Len);
fim;
{$ENDIF}
fim.
================================================= ===============
4.Binário para decimal
-------------------------------------------------- ---------------
/////////////////////////////////////////////// /
//converte base2 de 32 bits para base10 de 32 bits //
// número máximo = 99 999 999, retorne -1 se for maior //
/////////////////////////////////////////////// /
função Base10(Base2:Integer): Inteiro;
asm
cmp eax,100000000 // verifica o limite superior
jb @1 // ok
mov eax,-1 // sinalizador de erro
jmp @exit // sai com -1
@1:
push ebx // salva registros
empurre esi
xor esi,esi // resultado = 0
mov ebx,10 // desviador base 10
mov ecx,8 // 8 petiscos (10^8-1)
@2:
mov edx,0 // limpa o restante
div ebx // eax DIV 10, edx mod 10
adicione esi,edx // resultado = resultado + resto[I]
ror esi,4 // mudança de mordidela
loop@2 // loop para todos os 8 petiscos
mov eax,esi // resultado da função
pop esi // restaura registros
pop ebx
@saída:
fim;
-------------------------------------------------- ----------------------------------
Método.2
[Oliver Townshend, [email protected]]
-------------------------------------------------- ----------------------------------
função IntToBin (Valor: LongInt; Tamanho: Inteiro): String;
var
eu: inteiro;
começar
Resultado:=';
for i:=Tamanho até 0 comece
if Value e (1 shl i)<>0 então comece
Resultado:=Resultado+'1';
fim senão começo
Resultado:=Resultado+'0';
fim;
fim;
fim;
função BinToInt (Valor: String): LongInt;
var
i,Tamanho: Inteiro;
começar
Resultado:=0;
Tamanho:=Comprimento(Valor);
for i:=Tamanho até 0 comece
se Copy(Value,i,1)='1' então comece
Resultado:=Resultado+(1 shl i);
fim;
fim;
fim;
================================================= =========================