How do I convert a byte array to a string (base 256) in Delphi?
+3
A:
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;
himself
2010-10-07 12:57:37
Base 256 string is an ASCII string, as you got it correctly it is Ansistring/String in Delphi. The function bintoAscii works perfectly. Just that need to declare var i. Thank u!
seveleven
2010-10-07 13:17:29
If you just want to render the data you can just copy it to an AnsiString using Copy(Memory)
Remko
2010-10-07 13:23:03
There are only 127 characters in the ASCII character set. Maybe you are referring to Windows-1252.
Andreas Rejbrand
2010-10-07 17:38:23
+2
A:
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.
Rob Kennedy
2010-10-07 20:11:46