掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
バイナリのBlockWrite方法 (ID:47242)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
yTakeです。 度々お世話になりっています。 今回は基本的なことですが、バイナリーデータをファイルへ書き出す方法に付いてです。 "BlockWrite"を使いたいと思います。次ぎの2例を試しましたが、いずれも思う様に動作していません。 テスト1は、WordデータをByteに分割してバイト配列に格納し、"BlockWrite"で書き出します。 テスト2は、Wordデータをそのままワード配列に格納し、2Byte単位で"BlockWrite"で書き出します。 procedure test1(); var wid, hei, dpx, dpy, cnt : Word; buf : Array of Byte; fname : String; bf : File; begin wid := getTAG( $256 ); hei := getTAG( $257 ); dpx := getTAG( $258 ); dpy := getTAG( $259 ); SetLength( buf, 20 ); AssignFile( bf, filename ); ReWrite( bf, 1 ); buf[ 0 ] := 0; buf[ 1 ] := 0; buf[ 2 ] := $00FF and wid; buf[ 3 ] := $00FF and ( wid shr 8 ); buf[ 4 ] := $00FF and hei; buf[ 5 ] := $00FF and ( hei shr 8 ); buf[ 6 ] := 0; buf[ 7 ] := 0; buf[ 8 ] := $00FF and dpx; buf[ 9 ] := $00FF and ( dpx shr 8 ); buf[ 10 ] := $00FF and dpy; buf[ 11 ] := $00FF and ( dpy shr 8 ); buf[ 12 ] := $00FF and wid; buf[ 13 ] := $00FF and ( wid shr 8 ); buf[ 14 ] := $00FF and hei; buf[ 15 ] := $00FF and ( hei shr 8 ); buf[ 16 ] := 0; buf[ 17 ] := 0; // EPSON MAXD buf[ 18 ] := 0; buf[ 19 ] := 0; BlockWrite( bf, buf, 20, cnt ); CloseFile( bf ); end; procedure test2(); var wid, hei, dpx, dpy, cnt : Word; buf : Array of Byte; fname : String; bf : File; begin wid := getTAG( $256 ); hei := getTAG( $257 ); dpx := getTAG( $258 ); dpy := getTAG( $259 ); SetLength( buf, 10 ); AssignFile( bf, filename ); ReWrite( bf, 2 ); buf[ 0 ] := 0; buf[ 1 ] := wid; buf[ 2 ] := hei; buf[ 3 ] := 0; buf[ 4 ] := dpx; buf[ 5 ] := dpy; buf[ 6 ] := wid; buf[ 7 ] := hei; buf[ 8 ] := 0; buf[ 9 ] := 0; BlockWrite( bf, buf, 10, cnt ); CloseFile( bf ); end; wid, heiは"592"、dpx, dpyは"150"なのですが、 この結果をバイナリエディタで確認すると、全く違うデータが書き込まれています。 何か使い方に間違いがあるからと思いますが、よく分かりません。 どなたか、ご教授願えればと思います。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.