さーて ループの概要をつかんだところで
あと一歩!あと一歩!
c:=0;
While FS.Position<FS.Size do begin
FS.Read(buf,1);
str:=IntToHex(buf,2);
if c=0 then begin
Memo1.Lines.Add(str);
end else begin
Memo1.Lines[Memo1.Lines.Count-1]:=
Memo1.Lines[Memo1.Lines.Count-1]+' '+str;
end;
c:=c+1;
if c=16 then c:=0;
end;
この中で、前回はしょってた部分だけに焦点を絞ります。
「cが0-15を繰り返しながら、ファイルを読み終わるまでループしている」
ってことを念頭におきつつ見てください。
FS.Read(buf,1);
str:=IntToHex(buf,2);
if c=0 then begin
Memo1.Lines.Add(str);
end else begin
Memo1.Lines[Memo1.Lines.Count-1]:=
Memo1.Lines[Memo1.Lines.Count-1]+' '+str;
end;
1行目。ついに出た!読み込み処理!(おせえええええええ
TFileStreamのRead手続きを呼び出してます。
と思って調べたら、帰り値を返す関数でした。
まぁいいか。
Read(読込先の変数,読み込む長さ);
と使います。これはかなり珍しいタイプです。
引数が「変数」となってるので、型を指定しないのです。
内部的には、
「変数のアドレスを読み取って直接メモリーに書き込む」
ってことが起きてます。
まぁ、中のことはキニシナイ。(参考程度に。脳が爆発
さて、このときのために、とりあえず保存してとっておく場所、
バッファー(という名前の変数)を確保しておきました。早速出動です。
Read(buf,1);
簡単ですねえ。buf変数にファイルから1バイト読み込め!
ってことです。
なぜ1バイトなのか。
bufがByte型なのでそれ以上読めないからです。
いや、1バイト読むつもりだったからbyte型を確保したとも言う。
タマゴが先かにわとりが先か。
俺は卵派です。にわとりの祖先のトリが生んだタマゴから
突然変異でにわとりの赤ちゃんがうまれたはずなので。(ひよこかわいー
おっと。
そして、Readが呼ばれた後、ファイルストリームはストリーム位置を進めます。
Positionプロパティーですね。
Readしまくって全部やれば、ループを抜ける。
この連動感。う〜ん ぐるーびー(ぐるーびー って意味しらないけど
読み込むところはオッケイですか。
次に行きましょう。
str:=IntToHex(buf,2);
代入文ですね。左辺はstr。一時的保存のための文字列型でした。
右辺は? 新しい関数です。
「IntToHexは、整数型を16進表記した文字列型を返します」
名前の意味は単純です。
Int(整数を) To(変えろ!) Hex(へっくすに!)
へっくす ってのは ヘキサゴン の 6角形で、6の意味があるんだと思います。
16には10ぐらい足りない気がしますが、
きっと16もへっくす って付くんでしょう。
俺は しくすていーん しか知らん。
第1引数は整数型の変数です。
bufは整数型じゃなくてByte型ですが、
同じ整数型の仲間なので、
Delphiが勝手にIntegerとして考えて扱ってくれます。
第2引数は最低限の桁数 です。
たとえば、これに8を指定すれば、ただの1でも、
1
ではなくて
00000001
って文字列をくれる ってことですね。
このエディターでは1バイトずつ表すので、
1バイト=0〜255=00〜FF というわけで、
2桁欲しいので、
IntToHex(buf,2);
ってことです。
wikiのエディットボックスの、スクロールバーが、
ちっこくなってきたら一区切り って考えてるんですが、
もうちっこくなっちゃってるのでまた次へ後回し後回し・・・
コンテンツ
最新の12件
2023-06-12
2021-02-15
2013-06-19
2012-07-14
2012-02-04
2012-01-06
2011-03-31
2010-08-26
2010-03-15
2009-10-21
2009-02-12
2008-11-18
メニュー編集
- counter: 816
- today: 1
- yesterday: 0
- online: 1