reynosa - delphi technologies mexico
Delphi-Convertir matriz de bytes a cadena (4)
¿Cómo convierto una matriz de bytes en una cadena (base 256) en Delphi?
Creo que hay otra buena forma de convertir matrices de bytes en cadenas: una función Indy llamada BytesToString
contenida en IdGlobal
. También le permite especificar StartIndex
, Length
y TEncoding
para su cadena. Lo he usado varias veces y lo encuentro muy útil.
No estoy seguro de a qué te refieres con Base256. Si quieres obtener una representación hexadecimal de los datos, usa esto:
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 desea simplemente renderizar los datos como una cadena (¡esto no cambia el contenido!), Donde por cada byte de datos obtendrá un solo símbolo ASCII con ese código, haga
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;
Use el comando SetString
. Establece la cadena a la longitud requerida y copia los bytes. No es necesario que la matriz tenga terminación nula. De hecho, si la matriz tiene bytes de valor cero, aparecerán correctamente dentro de la cadena; ellos no terminarán la cadena.
SetString(AnsiStr, PAnsiChar(@ByteArray[0]), LengthOfByteArray);
Si tiene un UnicodeString
, necesitará dividir a la mitad el parámetro de longitud, ya que mide los caracteres, no los bytes:
SetString(UnicodeStr, PWideChar(@ByteArray[0]), LengthOfByteArray div 2);
Ver también, Convertir TMemoryStream a String en Delphi 2009 .
var
LString : string;
LBytes : TArray<byte>;
begin
LBytes := TArray<byte>.Create($01, $02, $03);
LString := TEncoding.ANSI.GetString(ABytes);
end;
Siendo GetString () la operación inversa de GetBytes ().