Comment convertir un tableau d'octets en une chaîne (base 256) dans Delphi?
Utilisez la commande intégrée SetString
. Il définit la chaîne à la longueur requise et copie les octets. Il n'est pas nécessaire que le tableau se termine par null. En fait, si le tableau contient des octets de valeur nulle, ils apparaîtront correctement dans la chaîne; ils ne termineront pas la chaîne.
SetString(AnsiStr, PAnsiChar(@ByteArray[0]), LengthOfByteArray);
Si vous avez un UnicodeString
, vous devrez alors diviser par deux le paramètre de longueur car il mesure les caractères, pas les octets:
SetString(UnicodeStr, PWideChar(@ByteArray[0]), LengthOfByteArray div 2);
Voir aussi Conversion de TMemoryStream en chaîne dans Delphi 2009 .
Je ne sais pas ce que tu veux dire par Base256. Si vous souhaitez obtenir une représentation hexadécimale des données, utilisez ceci:
function bintostr(const bin: array of byte): string;
const HexSymbols = '0123456789ABCDEF';
var i: integer;
begin
SetLength(Result, 2*Length(bin));
for i := 0 to Length(bin)-1 do begin
Result[1 + 2*i + 0] := HexSymbols[1 + bin[i] shr 4];
Result[1 + 2*i + 1] := HexSymbols[1 + bin[i] and $0F];
end;
end;
Si vous voulez simplement rendre les données sous forme de chaîne (cela ne change pas le contenu!), Où pour chaque octet de données vous obtiendrez un seul symbole ASCII avec ce code, faites
function bintoAscii(const bin: array of byte): AnsiString;
var i: integer;
begin
SetLength(Result, Length(bin));
for i := 0 to Length(bin)-1 do
Result[1+i] := AnsiChar(bin[i]);
end;
Je pense qu'il y a une autre belle façon de convertir des tableaux d'octets en chaînes - une fonction Indy appelée BytesToString
contenue dans IdGlobal
. Il vous permet également de spécifier StartIndex
, Length
et TEncoding
pour votre chaîne. Je l'ai utilisé plusieurs fois et je le trouve très utile.
var
LString : string;
LBytes : TArray<byte>;
begin
LBytes := TArray<byte>.Create($01, $02, $03);
LString := TEncoding.ANSI.GetString(ABytes);
end;
Être GetString () l'opération inverse de GetBytes ().