Ir para o conteúdo

Converter Inteiro Para Outra Base Numérica


Criado por Raficcha, Out 05 2010 09:55

Não há respostas para este tópico
  • Por favor, faça o login para responder

#1 Raficcha

Raficcha
  • Raficcha
  • Colaborador
  • 2 Revisões

Revisou 05 outubro 2010 - 09:55

O código abaixo converte um número inteiro para uma outra base. Você pode informar a base e os caracteres que compõe esta base númerica.
A base padrão da função é a hexadecimal (como pode ser visto no escopo, incluindo os caracteres que a compõe).

function IntToBase(Valor : integer; base: integer = 16; valores: string = '0123456789ABCDEF'):string;
var
	Saida : string;
	corrente : integer;
	fltValor: real; //o usuario informa um integuer, mas a função trabalha com float
	cont : byte;
begin
	Result := '';
	Saida := '';
	fltValor := Valor;
 	while (fltValor >= base)  do begin
	 	corrente := strtoint(floattostr(fltValor)) mod base;
		fltValor := (fltValor -(strtoint(floattostr(fltValor)) mod base))/base; //diminui-se o valor para que o resultado não gere um numero quebrado
		Saida := Saida + valores[corrente+1];
	end;
  	corrente := strtoint(floattostr(fltValor)) mod base;
	Saida := Saida + valores[corrente+1];
	for cont := length(Saida) downto 1 do
		Result := Result+Saida[cont];

    if (length(Result) = 1) then
        Result := valores[1]+Result;
end;

exemplos de uso:

conversão para base hexadecimal:
IntToBase(1000);

conversãro para base octal:
IntToBase(1000, 8);

conversão para base binária:
IntToBase(1000, 2);

conversão para uma base de exemplo 20 com caracteres alfanuméricos não sequenciais (como na base hexadecimal)
IntToBase(1000, 20, '0123456789ANHKIUYSJD');





1 usuário(s) está(ão) lendo este código

1 membro(s), 0 visitante(s) e 0 membros anônimo(s)