バイナリファイルの読み方がわかりません!
バイナリファイルの読み方がわかりません!
VBでしたら、バイナリモードで開くのが普通ですが、AB6ではモード指定がみあたりません。どのようにすればよいのでしょうか?また、エンディアン変換の方法も教えてほしいのですが・・・・・
Re: バイナリファイルの読み方がわかりません!
> VBでしたら、バイナリモードで開くのが普通ですが、AB6ではモード指定がみあたりません。どのようにすればよいのでしょうか?
どうでもいいツッコミで始めますけど、VB6とABの間違いですよね?
モード指定もなにもActiveBasicはバイナリモードでしか開くことができません。
> また、エンディアン変換の方法も教えてほしいのですが・・・・・
エンディアン変換って初めて聞いたので間違ってるかもしれませんけど、変数の型を変換したいならAs演算子を使います。
どうでもいいツッコミで始めますけど、VB6とABの間違いですよね?
モード指定もなにもActiveBasicはバイナリモードでしか開くことができません。
> また、エンディアン変換の方法も教えてほしいのですが・・・・・
エンディアン変換って初めて聞いたので間違ってるかもしれませんけど、変数の型を変換したいならAs演算子を使います。
コード: 全て選択
Dim i As Integer
Dim d As Double
d=0.5
i=d As Integer ' 普段はInt関数やFix関数で整数に変換しますけど...
ABにはVBのバイナリモードに相当するものはありません。
API関数を使って読み込むのが良いでしょう。
エンディアン変換にはWinSockの関数が使えます。
nはネットワークエンディアン,hはホストエンディアンを意味します。
ネットワークエンディアン = ビックエンディアン
ホストエンディアン = 今使っている環境のエンディアン(x86などでは当然リトルエンディアン)
API関数を使って読み込むのが良いでしょう。
エンディアン変換にはWinSockの関数が使えます。
コード: 全て選択
#strict
#prompt
TypeDef u_short = Word
TypeDef u_long = DWord
Declare Function htons Lib "wsock32.dll" (netshort As u_short) As u_short
Declare Function htonl Lib "wsock32.dll" (netshort As u_long) As u_long
Declare Function ntohs Lib "wsock32.dll" (netshort As u_short) As u_short
Declare Function ntohl Lib "wsock32.dll" (netshort As u_long) As u_long
Print Hex$(htons(&habcd))
Print Hex$(htonl(&h12345678))
Print Hex$(ntohs(&hcdab))
Print Hex$(ntohl(&h78563412))
ネットワークエンディアン = ビックエンディアン
ホストエンディアン = 今使っている環境のエンディアン(x86などでは当然リトルエンディアン)
Re: バイナリファイルの読み方がわかりません!
> モード指定もなにもActiveBasicはバイナリモードでしか開くことができません。
とありますが、バイナリで書き込む方法はどうするのでしょうか?
ヘルプを見ながら作ったのですが読み込み方は次の方法でよろしいのでしょうか?
とありますが、バイナリで書き込む方法はどうするのでしょうか?
ヘルプを見ながら作ったのですが読み込み方は次の方法でよろしいのでしょうか?
コード: 全て選択
’書き込み
Dim buffer As String
Dim byt As Byte
buffer="12"
Open "write.txt" as #1 ’当然のことながらファイルはバイナリにはならない
Field #1,2
Put #1,1,buffer
Close #1
’読み込み
buffer=""
Open "write.txt" as #2
Field #2,2
Get #2,1,buffer
Close #2
byt=Asc(buffer)
MessageBox(0,Str$(byt),"ファイルの中身",MB_OK)
Re: バイナリファイルの読み方がわかりません!
> > モード指定もなにもActiveBasicはバイナリモードでしか開くことができません。
> とありますが、バイナリで書き込む方法はどうするのでしょうか?
> ヘルプを見ながら作ったのですが読み込み方は次の方法でよろしいのでしょうか?
Win32APIを直接弄る人間で、Open関数などなど使ったことがないのでちょっと変かもしれません。
というかバイナリに関する知識がないので全く違うことしてるかもしれません...。
これでいいんでしょうか?
> とありますが、バイナリで書き込む方法はどうするのでしょうか?
> ヘルプを見ながら作ったのですが読み込み方は次の方法でよろしいのでしょうか?
Win32APIを直接弄る人間で、Open関数などなど使ったことがないのでちょっと変かもしれません。
というかバイナリに関する知識がないので全く違うことしてるかもしれません...。
[ここをクリックすると内容が表示されます]
とりあえずファイルには "12" じゃなくて "4950" と出力されています。コード: 全て選択
' 書き込み
Dim buffer As String, b As String
Dim len As Long, cnt As Long
buffer="12"
len=Len(buffer)
For cnt=0 To len
b=b+Str$(buffer[cnt])
Next
Open "write.txt" as #1 '当然のことながらファイルはバイナリにはならない
Field #1,Len(b)
Put #1,1,b
Close #1
これでいいんでしょうか?