3
我想一個字符串轉換爲字節數組,代碼如下所示:轉換字符串到字節數組將無法正常工作
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個字符串元素( =在我的位置),我將它的數值保存到tmp。
這適用於某些字符,但不是所有的,例如:
奧德(「•」)返回十二月(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不轉換奧德(149)爲「•」正如所料,因此StringToByteArray將不會在以後工作
作出的編輯我的帖子,請看看TLama –
我也做了更新。 – TLama
謝謝你,作品像一個魅力! –