Delphi - Byte array to string
arrays, byte, delphi, string
Solution
The problem that you encounter is that you have defined your own byte array type like this:
type
TBuff = array of Byte;
This private type of yours is not assignment compatible with other byte array types. Most RTL functions that use byte arrays use the RTL type `TBytes` which is declared as `TArray<Byte>`.
The first thing for you to do is to remove `TBuff` from your program and instead use `TBytes`. If you continue to use `TBuff` you will find that all your byte array code lives in its own ghetto, unable to interact with library functionality that uses `TBytes`. So, escape the ghetto, and remove your `TBuff` type from existence.
Now, in order to convert a byte array to a string, you need to provide encoding information to do this. You have selected `StringOf` which should be considered a legacy function these days. It is better to be more explicit in your conversion and use `TEncoding`.
For instance, if the byte array is UTF-8 you write:
str := TEncoding.UTF8.GetString(ByteArray);
If the byte array is encoded in the local ANSI encoding you write:
str := TEncoding.ANSI.GetString(ByteArray);
In your case the use of `StringOf` indicates that the byte array is ANSI encoded so this latter example is what you need.
Problem
In my Delphi VCL Form application I've a procedure which has a TBuff parameter (defined before as array of byte). Inside this procedure, I have to convert the parameter to a string. ``` procedure Form1.Convert(Collect: TBuff); var str: String; begin str := SysUtils.StringOf(Collect); end; ``` After the compile, I was warned about the presence of this compiler error: Incompatible types :'System.TArray<System.TByte>' and 'TBuff'