相关疑难解决方法(0)

如何将TBytes转换为RawByteString?

在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)

delphi string delphi-2009

5
推荐指数
4
解决办法
8259
查看次数

为什么TStringStream.Bytes与'TStream.Read'的不同之处

使用TStringStream时,bytes使用其Bytes属性与bytes提取的使用不同TStream.Read.如下所示:

  1. 所述bytes使用所提取的TStream.Read表示正确的数据.
  2. 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)

delphi byte stringstream

1
推荐指数
1
解决办法
2322
查看次数

标签 统计

delphi ×2

byte ×1

delphi-2009 ×1

string ×1

stringstream ×1