我想将字符串转换为字节数组,代码如下所示:
procedure StringToByteArray(const s : String; var tmp: array of Byte);
var
i : integer;
begin
For i:=1 to Length(s) do
begin
tmp[i-1] := Ord(s[i]);
end;
end;
s[i] 这是第 i 个字符串元素(= pos i 处的 char),我将其数值保存到 tmp。
这适用于某些字符,但不适用于所有字符,例如:
Ord('•') 返回 Dec(149),这是我所期望的。
但是在我的过程中 Ord(s[i]) 为同一个字符返回 Dec(8226) !
Edit1:我认为缺陷在于我的另一个函数“ByteArrayToStr”
转换时...
tmp:= 149 // tmp is of type byte
Log('experiment: ' + Chr(tmp)); // prints "•"
Log('experiment2 ' + IntToStr(Ord(Chr(tmp)))); // prints 149
...来回,这似乎有效。
但是在以下函数中使用相同的转换不会这样做:
function ByteArrayToStr( a : array of Byte ) : String;
var
S:String;
I:integer;
begin
S:='';
For I:=0 to Length(a) -1 do
begin
tmp := Chr(a[I]) ; // for a[I] equals 149 this will get me "?" instead of "•"
S:=S+tmp;
end;
Result:=S;
end;
为了清楚起见: ByteArrayToStr 没有按预期将 Ord(149) 转换为“•”,因此 StringToByteArray 稍后将无法工作