- PR -

バイナリデータの読み込み

投稿者投稿内容
あび
ベテラン
会議室デビュー日: 2004/07/29
投稿数: 59
投稿日時: 2005-05-18 19:04
バイナリデータの読み込み方法について2つ質問があります。

質問@例えば、4バイトの整数型のバイナリデータを読み込む方法です。
バイト単位で読んで、数値を計算する方法でやってみました。(以下....)

Dim SR As Stream = File.Open("...", FileMode.Open, FileAccess.Read)
Dim BR As New BinaryReader(SR)

Dim A(3) As Byte
Dim Num As Integer

A=BR.ReadBytes(4)

Num=CInt(CInt(A(0)) * 256 ^ 3 + CInt(A(1)) * 256 ^ 2 + _
CInt(A(2)) * 256 + CInt(A(3)))

これだと、何かスマートじゃ無い気がするのですが、他の方法はありますか?
ReadInt32メソッドを試してみましたが、結果が正しくありませんでした。


質問ABCDコードで表現されたバイナリデータを数値に変換する方法はありますか?


Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2005-05-18 19:15
引用:

質問@例えば、4バイトの整数型のバイナリデータを読み込む方法です。



BitConverter.ToInt32() は使えませんか?


引用:

質問ABCDコードで表現されたバイナリデータを数値に変換する方法はありますか?



二進化十進数は良くわかりません。ごめんなさい。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
iStation
大ベテラン
会議室デビュー日: 2003/12/08
投稿数: 158
投稿日時: 2005-05-18 19:27
引用:

あびさんの書き込み (2005-05-18 19:04) より:
...
これだと、何かスマートじゃ無い気がするのですが、他の方法はありますか?
ReadInt32メソッドを試してみましたが、結果が正しくありませんでした。
...


先ず、HexDump のプログラムから書き始めてみるとか...
_________________
IEEE-CSDP 2004-2007
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-05-18 19:32
引用:

Jubeiさんの書き込み (2005-05-18 19:15) より:
引用:

質問@例えば、4バイトの整数型のバイナリデータを読み込む方法です。


BitConverter.ToInt32() は使えませんか?


ビッグエンディアンで解釈する必要があるようですから、BitConverterも同じことですね。


Windows上で動かす.NETでは、ビッグエンディアンは普通使われません。
ビッグエンディアンを扱うのなら、あびさん自身がお書きになったようなコードが必要でしょう。

二進化十進を単純に変換するようなライブラリも標準では付いていませんね。
VB.NETではビットシフトがないので多少非直感的ですが(VB2005で増えるんだっけ)、
ビット演算でマスクしてやれば求めるのはそう難しくはないでしょう。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2005-05-19 09:09
引用:

ビッグエンディアンで解釈する必要があるようですから、BitConverterも同じことですね。
Windows上で動かす.NETでは、ビッグエンディアンは普通使われません。
ビッグエンディアンを扱うのなら、あびさん自身がお書きになったようなコードが必要でしょう。



IPAddress.NetworkToHostOrder()を使うとか。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
あび
ベテラン
会議室デビュー日: 2004/07/29
投稿数: 59
投稿日時: 2005-05-19 11:16
@バイト単位のデータは何とかできそうです。
ありがとうございました。

Aについては、どうでしょう?
具体的には、例えば、1バイト8ビットの中身が、3,2,1,1ビットの4つのデータ(2進数表示)になっている場合です。
ビット演算(マスキング)をどう使うのか、全くイメージが湧かないのですが。。。。
もう少し、ヒントを頂けないでしょうか?
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-05-19 11:21
引用:

あびさんの書き込み (2005-05-19 11:16) より:
ビット演算(マスキング)をどう使うのか、全くイメージが湧かないのですが。。。。
もう少し、ヒントを頂けないでしょうか?


もし、あびさんの身近にCプログラマがいたら、その人に聞くのが一番手っ取り早いと思います。で、Cでソース組んでアルゴリズムを把握して、それをVB.NETのコードに置き換える。
あび
ベテラン
会議室デビュー日: 2004/07/29
投稿数: 59
投稿日時: 2005-05-19 12:03
BitArrayクラスを使うと簡単にできそうなので、やってみます。

スキルアップ/キャリアアップ(JOB@IT)