2

渡すことができる Base64 文字列の大きさに制限はありますか?

私は以下を使用していますが、画像が作成されると、下部の一部が欠けています。BufferLen は ~44000 ですが、DecodeBase64 は約 24000 項目の配列を返します。

BufferLen := (Length(JVal) * 4) div 3;
SetLength(PtrB, BufferLen);
PtrB := DecodeBase64(AnsiString(JVal));

JStream := TStringStream.Create(PtrB);
Jpeg := TJPEGImage.Create;
Jpeg.LoadFromStream(JStream);
Self.JPG := Jpeg;
4

1 に答える 1

4

AnsiStringSoap.EncdDecd ユニットのコードには、データ型の使用によるサイズ制限を超えたサイズ制限はありません。

100MB の文字列を正常にエンコードしてからデコードするこのプログラムは、ポイントを示しています。

{$APPTYPE CONSOLE}

uses
  Soap.EncdDecd;

var
  i: Integer;
  plain, encoded: string;

begin
  SetLength(plain, 100*1024*1024);
  for i := 1 to Length(plain) do
    plain[i] := Chr(32+Random(80));
  encoded := EncodeString(plain);
  if plain=DecodeString(encoded) then
    Writeln('passed')
  else
    Writeln('failed');
  Readln;
end.

EncdDecdあなたの問題は、ほぼ確実に、ユニットではなくコードにあります。

コードはかなり単純になる可能性があります。例えば:

JStream := TBytesStream.Create(DecodeBase64(JVal));
Jpeg := TJPEGImage.Create;
Jpeg.LoadFromStream(JStream);
于 2013-04-10T21:05:48.640 に答える