はじめまして。
"array of char"から"string"への変換ですが、
var
s: string;
a: array[0..255] of char;
s := string(a);
としておりますが、
aの値の途中で"#0"が入ると切れてしまいます。
s<'ABC'> := string(a<'A','B','C','#0','E','F'・・・>)
↑これを
s<'ABC#0EF・・・'> := string(a<'A','B','C','#0','E','F'・・・>)
↑にしたいです。
そこで
for i := 0 to 255 do
s := s + a[i]
としておりますが、aのサイズが大きくなると処理が遅くなります。
高速で処理出来る良い方法はないでしょうか?
Move で入りますね。
procedure TForm1.Button1Click(Sender: TObject);
var
s,t:string;
a: array[0..5] of Char;
begin
a[0] := 'A'; a[1] := 'B'; a[2] := 'C'; a[3] := #0;
a[4] := 'E'; a[5] := 'F';
SetLength(s,6);
Move(a[0], s[1], 6);
Label1.Caption := s;
Label2.Caption := s[5]+s[6];
t := string(a);
Label3.Caption := t;
Label4.Caption := t[5]+t[6];
end;
"えと"さん、ありがとうございます。
上記の方法で無事出来ました。
画像データをstring型に変換したかったのですが、#0が入って上手く出来なく困っておりました。
"Move"とはヘルプで調べたのですが出て来ませんでしたが、WindowsのAPIなのでしょうか?
>画像データをstring型に変換したかったのですが
stringに変換?ナンのため?
>"Move"とはヘルプで調べたのですが出て来ませんでしたが
「言語カイドヘルプ」でなく、「VCLリファレンスヘルプ」。
"Move"は、Delphiの関数。APIを呼び出すのではなく、アセンブラ記述なので速い。
同じ機能のAPIは MoveMemoryだけど、引数のsrc、dstが逆なのでウッカリするとバグのもとかな。
興味深々さん
odbc apiで取得したblobデータがpcharで、それをstring型に入れると#0以下が切れてしまうので、イメージが正しく表示出来なかったもので。。。
SQLGetDataというAPIで取得していますが、string型でデータを取ろうとすると出来なかったので、pcharで取るようにしました。
それをstringに変換してTStringStream,TBitmapを介して表示させています。
> pcharで取るようにしました。
> それをstringに変換してTStringStream,TBitmapを介して表示させています。
それは無駄です。 Pchar って、単なるポインタですから、サイズが分かれば
文字列にする必要はなく、直接 TMemoryStream に書き込んで TBitmap の
LoadFromStream() でうまくいくはずです。文字列にする理由は何もありません。
ツイート | ![]() |