たまに現れては質問ばっかりですみませんm(__)m
var
Chr: array[0..x] of Char;
Str: String;
begin
Chr:=Str;
//↑もちろん、これじゃ無理です。
今回、バイナリでファイルを出力するので、Char型になってるんです。
そうじゃなくても大丈夫だ って場合もお願いします。教えてください。
では...
CopyMemory(@Chr[0], PChar(Str), x);
でコピーできます。
ほかにもいろいろなアプローチの仕方がありますが。
詳しくは、CopyMemoryをWin32のヘルプで調べてみてください。
カルガモ「こんなんもありかも鍋。φ(..)♪」
type
ArrayOfByte = array of byte;
var
sStr: string;
cChr: ArrayOfByte absolute sStr;
i : Integer;
begin
sStr := 'ほにゃらら?コピー不要かいな?そうかいな';
Memo1.Lines.Add(PChar(cChr));
for i:=0 to StrLen(PChar(cChr)) do
Memo1.Text := Memo1.Text + IntToHex(cChr[i], 2) + ' ';
end;
ドジョウ「ん?そんなことせんで、これでどじょう鍋。ζ」
begin
sStr := 'ほにゃらら?そのまんまファイル保存かいな?そうかいな';
fs := TFileStream.Create('ほにゃらら.bin', fmCreate);
fs.Write(sStr[1], Length(sStr));
fs.Free;
end;
缶チュウハイ「そのまんま保存なん意味ないで。エディタで見えてまんがな。見せとうないンなら暗号化せなあかんチュウハイ」
にしのさんと考え方は同じですが、Delphiの標準関数を使うと、
StrPLCopy(Chr, Str, x);
カモ鍋さんの、
sStr: string;
cChr: ArrayOfByte absolute sStr;
absolute は知っていたんですがこんなことできるんですね。
これはコピーではなく、同じメモリを共有するというイメージ
ですよね。長い文字列型と共有するとなると使い方によっては
なんか不安がありますね。どうなんだろう。
みなさん、どうも色々と有難うございます。
おかげで解決できました。
感謝いたします。
ツイート | ![]() |