Conversiones comunes bajo Delphi
Autor:lyboy99
correo electrónico:[email protected]
URL: http://hnh.126.com
Proporcionarle varios métodos de conversión utilizados comúnmente y sus funciones de conversión.
Espero que te ayude
1.HEX -> Entero
2.2.Dec a HEX
3.ASCII a HEX/matemáticas
4.Binario a decimal
==================================================== =============
1.HEX -> Entero
==================================================== =============
Método.1
-------------------------------------------------- ----------------------------------
var
yo: entero
s: cadena;
comenzar
s := '$' + ThatHexString;
yo := StrToInt(a);
fin;
-------------------------------------------------- ----------------------------------
Método.2
-------------------------------------------------- ----------------------------------
CONST HEX: ARRAY['A'..'F'] DE INTEGER = (10,11,12,13,14,15);
Cadena VAR: Cadena;
internacional,
yo: número entero;
COMENZAR
READLN(cadena);
Int := 0;
PARA i := 1 A Longitud(cadena) HACER
SI cadena[i] < 'A' ENTONCES Int := Int * 16 + ORD(cadena[i]) - 48
ELSE Int := Int * 16 + HEX[cadena[i]];
ESCRIBIR(Int);
LEER LN;
FIN.
==================================================== =
2.Dec a HEX
-----------------------------------------
HexString := Formato('%0x',DecValue);
-----------------------------------------
==================================================== ==
3.ASCII a HEX/matemáticas
--------------------------
unidad Hextr;
interfaz
utiliza String16, SysUtils;
Tipo
PByte = ^BYTE;
Procedimiento BytesToHexStr(var hHexStr: String; pbyteArray: PByte; InputLength: Word);
procedimiento HexStrToBytes(hHexStr: Cadena; pbyteArray: Puntero);
procedimiento HexBytesToChar(var Respuesta: Cadena; hexbytes: PChar; Longitud de entrada: PALABRA);
implementación
procedimiento BytesToHexStr(var hHexStr: String; pbyteArray: PByte; InputLength: WORD);
constante
HexChars: Matriz[0..15] de Char = '0123456789ABCDEF';
var
i, j: PALABRA;
comenzar
SetLength(hHexStr, (InputLength * 2));
FillChar(hHexStr, tamaño de(hHexStr), #0);
j := 1;
para i: = 1 a InputLength comenzar
hHexStr[j] := Char(HexChars[pbyteArray^ shr 4]);
hHexStr[j] := Char(HexChars[pbyteArray^ y 15]);
inc(pbyteArray);
fin;
fin;
procedimiento HexBytesToChar(var Respuesta: Cadena; hexbytes: PChar; Longitud de entrada: PALABRA);
var
i: PALABRA;
c: byte;
comenzar
EstablecerLongitud (Respuesta, Longitud de entrada);
FillChar(Respuesta, TamañoDe(Respuesta), #0);
para i: = 0 a (InputLength - 1) comience
c := BYTE(hexbytes[i]) Y BYTE($f);
si c > 9 entonces
Inc(c, $37)
demás
Inc(c, $30);
Respuesta[i + 1] := char(c);
fin;{para}
fin;
procedimiento HexStrToBytes(hHexStr: Cadena; pbyteArray: Puntero);
{pbyteArray debe apuntar a suficiente memoria para contener la salida}
var
i, j: PALABRA;
temperaturaPPTr: PChar;
dosDígitos: Cadena[2];
comenzar
tempPtr := pbyteArray;
j := 1;
para i: = 1 a (Longitud (hHexStr) DIV 2) comience
dosDígitos := Copiar(hHexStr, j, 2); Inc(j, 2);
PByte(tempPtr)^ := StrToInt('$' + dosDigits Inc(tempPtr);
fin;{para}
fin;
fin.
-------------------------------------------------- ----------------------------------
-------------------------------------------------- ----------------------------------
UNIDAD Cadena16.
interfaz
{$IFNDEFWin32}
procedimiento SetLength(var S: cadena; Len: Entero);
procedimiento SetString(var Dst: cadena; Src: PChar; Len: Entero);
{$ENDIF}
implementación
{$IFNDEFWin32}
procedimiento SetLength(var S: cadena; Len: Entero);
comenzar
si Len > 255 entonces
S[0] := Chr(255)
demás
S[0] := Chr(Len)
fin;
procedimiento SetString(var Dst: cadena; Src: PChar; Len: Entero);
comenzar
si Len > 255 entonces
Mover(Origen^, Dst[1], 255)
demás
Mover(Src^, Dst[1], Len);
EstablecerLongitud(Dst, Len);
fin;
{$ENDIF}
fin.
==================================================== ================
4.Binario a decimal
-------------------------------------------------- ---------------
////////////////////////////////////////////////// /
// convierte base2 de 32 bits a base10 de 32 bits //
// número máximo = 99 999 999, devuelve -1 si es más //
////////////////////////////////////////////////// /
función Base10(Base2:Entero): Entero;
ENSAMBLE
cmp eax,100000000 // comprobar el límite superior
jb@1 // ok
mov eax,-1 // indicador de error
jmp @exit // salir con -1
@1:
push ebx // guardar registros
empujar esi
xor esi,esi // resultado = 0
mov ebx,10 // base desviadora 10
mov ecx,8 // 8 mordiscos (10^8-1)
@2:
mov edx,0 // borrar resto
div ebx // eax DIV 10, edx mod 10
agregar esi,edx // resultado = resultado + resto[I]
ror esi,4 // cambiar mordisco
loop@2 // bucle para los 8 mordiscos
mov eax,esi // resultado de la función
pop esi // restaurar registros
pop ebx
@salida:
fin;
-------------------------------------------------- ----------------------------------
Método.2
[Oliver Townshend, [email protected]]
-------------------------------------------------- ----------------------------------
función IntToBin (Valor: LongInt; Tamaño: Entero): Cadena;
var
i: Entero;
comenzar
Resultado:=';
para i:=Tamaño reducido a 0 comenzar
si Valor y (1 shl i)<>0 entonces comenzar
Resultado:=Resultado+'1';
fin si no comenzar
Resultado:=Resultado+'0';
fin;
fin;
fin;
función BinToInt (Valor: Cadena): LongInt;
var
i,Tamaño: Entero;
comenzar
Resultado:=0;
Tamaño:=Longitud(Valor);
para i:=Tamaño reducido a 0 comenzar
si Copiar(Valor,i,1)='1' entonces comienza
Resultado:=Resultado+(1 shl i);
fin;
fin;
fin;
==================================================== ===========================