在Delphi 2009中将声明为TBytes的字节数组转换为RawByteString的最佳方法是什么?这段代码实际上有效,也许有更快的方式(没有循环):
function Convert(Bytes: TBytes): RawByteString;
var
I: Integer;
begin
SetLength(Result, Length(Bytes));
for I := 0 to ABytes - 1 do
Result[I + 1] := AnsiChar(Bytes[I]);
end;
Run Code Online (Sandbox Code Playgroud) 使用TStringStream时,bytes使用其Bytes属性与bytes提取的使用不同TStream.Read.如下所示:
bytes使用所提取的TStream.Read表示正确的数据.bytes使用它的Bytes属性包含更多的数据.bytes不同bytes)你能帮忙评论可能的原因吗?非常感谢您的帮助!
PS:Delphi XE,Windows 7.(似乎在Delphi 7中的TStringStream没有LoadFromFile或SaveToFile.)
PS:可以从SkyDrive下载示例文件:REF_EncodedSample和REF_DecodedSample.(Zlib压缩的图像文件.).
procedure CompareBytes_2;
var
ss_1: TStringStream;
ss_2: TStringStream;
sbytes_Read: TBytes;
sbytes_Property: TBytes;
len_sbytes_Read: Integer;
len_sbytes_Property: Integer;
filename: string;
begin
filename := 'REF_EncodedSample'; // textual data
// filename := 'REF_DecodedSample'; // non-textual data
ss_1 := TStringStream.Create;
ss_1.LoadFromFile(filename);
ss_2 := TStringStream.Create;
ss_2.LoadFromFile(filename);
ss_1.SaveToFile(filename+ '_CopyByStringStream_1');
ss_2.SaveToFile(filename+ '_CopyByStringStream_2');
len_sbytes_Read := ss_1.Size;
SetLength(sbytes_Read, len_sbytes_Read); …Run Code Online (Sandbox Code Playgroud)