array of charからstring

解決


kota  2005-06-16 20:31:19  No: 15679

はじめまして。
"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のサイズが大きくなると処理が遅くなります。
高速で処理出来る良い方法はないでしょうか?


えと  2005-06-16 21:13:33  No: 15680

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;


kota  2005-06-17 23:03:54  No: 15681

"えと"さん、ありがとうございます。
上記の方法で無事出来ました。
画像データをstring型に変換したかったのですが、#0が入って上手く出来なく困っておりました。
"Move"とはヘルプで調べたのですが出て来ませんでしたが、WindowsのAPIなのでしょうか?


興味深々  2005-06-17 23:37:48  No: 15682

>画像データをstring型に変換したかったのですが
stringに変換?ナンのため?
>"Move"とはヘルプで調べたのですが出て来ませんでしたが
「言語カイドヘルプ」でなく、「VCLリファレンスヘルプ」。
"Move"は、Delphiの関数。APIを呼び出すのではなく、アセンブラ記述なので速い。
同じ機能のAPIは MoveMemoryだけど、引数のsrc、dstが逆なのでウッカリするとバグのもとかな。


Kota  2005-06-25 02:46:15  No: 15683

興味深々さん
odbc apiで取得したblobデータがpcharで、それをstring型に入れると#0以下が切れてしまうので、イメージが正しく表示出来なかったもので。。。
SQLGetDataというAPIで取得していますが、string型でデータを取ろうとすると出来なかったので、pcharで取るようにしました。
それをstringに変換してTStringStream,TBitmapを介して表示させています。


あれれ  2005-06-25 03:52:37  No: 15684

> pcharで取るようにしました。
> それをstringに変換してTStringStream,TBitmapを介して表示させています。

それは無駄です。 Pchar って、単なるポインタですから、サイズが分かれば
文字列にする必要はなく、直接 TMemoryStream に書き込んで TBitmap の
LoadFromStream() でうまくいくはずです。文字列にする理由は何もありません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加