Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delphi - Convert byte array to string

Tags:

delphi

How do I convert a byte array to a string (base 256) in Delphi?

like image 950
seveleven Avatar asked Oct 07 '10 12:10

seveleven


4 Answers

Use the built-in SetString command. It sets the string to the required length and copies the bytes. There's no need for the array to be null-terminated. In fact, if the array has zero--valued bytes in it, they'll correctly appear within the string; they won't terminate the string.

SetString(AnsiStr, PAnsiChar(@ByteArray[0]), LengthOfByteArray);

If you have a UnicodeString, then you'll need to halve the length parameter since it measures characters, not bytes:

SetString(UnicodeStr, PWideChar(@ByteArray[0]), LengthOfByteArray div 2);

See also, Converting TMemoryStream to String in Delphi 2009.

like image 149
Rob Kennedy Avatar answered Nov 10 '22 11:11

Rob Kennedy


I'm not sure what do you mean by Base256. If you want to get hex representation of data, use this:

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;

If you want to just render the data as a string (this doesn't change the content!), where for each byte of data you'd get a single ASCII symbol with that code, do

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;
like image 43
himself Avatar answered Nov 10 '22 11:11

himself


var
   LString : string;
   LBytes : TArray<byte>;
begin    
   LBytes := TArray<byte>.Create($01, $02, $03);
   LString := TEncoding.ANSI.GetString(ABytes);
end;

Being GetString() the reverse operation of GetBytes().

like image 6
drakorg Avatar answered Nov 10 '22 10:11

drakorg


I think there is another nice way to convert byte arrays in strings - an Indy function called BytesToString contained in IdGlobal. It also allows you to specify StartIndex, Length and TEncoding for your string. I've used it several times and I find it very useful.

like image 2
Boris D. Teoharov Avatar answered Nov 10 '22 11:11

Boris D. Teoharov