Base converting/fr
English · Français
Cette unité vous permettra de passer d'une base de numération à une autre, chaque base est choisie dans l'intervalle 2..36.
unit BaseConvert;
interface
function IntToBaseStr(Value, BaseOut: integer): String;
function BaseStrToInt(Value: String; BaseIn: Integer): Integer;
function BaseToBase(ValueIn: String; baseIn, BaseOut: Integer): String;
implementation
resourceString
rsBadBase = 'Base %d invalide, elle doit être comprise entre'
+' %d et %d';
rsBadDigitInValue = 'Mauvais chiffre %s dans la valeur, base = %d';
const
Digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
// Exprime la valeur dans la base voulue.
function IntToBaseStr(Value, BaseOut: integer): String;
var
rmndr: integer; // reste
begin
// validité de la base ?
if not InRange(BaseOut, 2, Length(Digits)) then
raise ERangeError.CreateFmt(rsBadBase, [BaseOut, 2, length(Digits)]);
// Décomposition de la valeur, la variable prend à chaque fois la valeur du diviseur
// L'instruction repeat permet de tenir compte de la valeur 0
Result := '';
repeat
divmod(Value, BaseOut, Value, rmndr);
Result := Digits[rmndr+1] + Result;
until Value = 0;
End;
// Transforme la chaîne d'un nombre exprimé dans la base paramètre en l'entier équivalent.
// Si la chaîne est vide, le résultat est 0.
// Attention : Pas de vérification de dépassement d'entier. il faut utiliser des valeurs raisonnables
function BaseStrToInt(Value: String; BaseIn: Integer): Integer;
var
d: Char;
digit: Integer;
begin
Result := 0;
for d in Value do
begin
digit := Pos(d, Digits) - 1;
if not InRange(digit, 0, BaseIn-1) then
raise ERangeError.CreateFmt(rsBadDigitInValue, [d, BaseIn]);
Result := Result * BaseIn + digit;
end;
End;
// Conversion directe de nombre exprimé dans une base vers une autre
function BaseToBase(ValueIn: String; baseIn, BaseOut: Integer): String;
begin
// le cas BaseIn=BaseOut n'est volontairement pas traité de manière spécifique
// en vue des tests unitaires.
Result := IntToBaseStr(BaseStrToInt(ValueIn, BaseIn), BaseOut);
End;
End.From the Free Pascal wiki, page "Base converting/fr", as it stood on 2020-02-09 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.
Talk about this page
Nobody has opened a bench for this page yet. Sign in to open one.
