NI製品ディスカッション

cancel
Showing results for 
Search instead for 
Did you mean: 

バイナリファイルの構造について

Solved!
Go to solution
Highlighted

LabVIEWでバイナリファイルを作成しました。

(文字列の二次元配列をクラスタにしてバイナルファイルに書き込み)

 

質問1

出来上がったバイナリファイルをバイナリエディタで開くと

先頭から8バイト目までは配列の行と列のサイズですが、

9バイト目~12バイト目は何が入っているのでしょうか?

 

質問2

配列データを見ると文字コードの後方に数字が付属しますが、この数値の読解方法はありますでしょうか。

例)

配列の1データが「あいうえお」の場合:

82A082A282A482A682A80E000000

となる。後ろの0E000000はバイト数?(14バイト=0E?)

 

しかし、他の文字列を入れたときにこの計算が成り立たないので

他にルールがあるのではないかと思うのですが、

このルールがありましたら教えて頂けないでしょうか。

よろしくお願いいたします。

0 Kudos
Message 1 of 3
(266 Views)
Highlighted
Solution
Accepted by topic author curiosity33
いずれの場合も先頭に配列サイズを追記しない設定で、動作を確認してみました。
末尾の「0E00」は私の手元では再現できませんでした。基本的にLabVIEWのメモリ取り扱いは
以下のリンクに従うので、検証結果はリンクに説明あるものと同じかと考えています。
 
どういったVIとデータで保存を試されているかわかれば、もう少し調べられるかもしれません。
 
 
1行1列の文字列配列、[0 0] = 「あい」の場合
  ADDRESS  +0 +1 +2 +3 +4 +5 +6 +7  +8 +9 +A +B +C +D +E +F  0123456789ABCDEF
----------+-------------------------------------------------------------------
  00000000: 00 00 00 04 82 A0 82 A2  -- -- -- -- -- -- -- --  ........   
 
2行2列の文字列配列
すべて「あい」の場合
   ADDRESS  +0 +1 +2 +3 +4 +5 +6 +7  +8 +9 +A +B +C +D +E +F  0123456789ABCDEF
----------+-------------------------------------------------------------------
  00000000: 00 00 00 04 82 A0 82 A2  00 00 00 04 82 A0 82 A2  ................
  00000010: 00 00 00 04 82 A0 82 A2  00 00 00 04 82 A0 82 A2  ................     

 

2行3列の文字列配列

[0 0] = 「あい」、[0 1] = 「うえ」、[0 2] = 「おか」、

[1 0] = 「きく」、[1 1] = 「けこ」、[1 2] = 「さし」

   ADDRESS  +0 +1 +2 +3 +4 +5 +6 +7  +8 +9 +A +B +C +D +E +F  0123456789ABCDEF
----------+-------------------------------------------------------------------
  00000000: 00 00 00 04 82 A0 82 A2  00 00 00 04 82 A4 82 A6  ................
  00000010: 00 00 00 04 82 A8 82 A9  00 00 00 04 82 AB 82 AD  ................
  00000020: 00 00 00 04 82 AF 82 B1  00 00 00 04 82 B3 82 B5  ................

 

 

1行1列の文字列配列、[0 0] = 「あいうえお」の場合
   ADDRESS  +0 +1 +2 +3 +4 +5 +6 +7  +8 +9 +A +B +C +D +E +F  0123456789ABCDEF
----------+-------------------------------------------------------------------
  00000000: 00 00 00 0A 82 A0 82 A2  82 A4 82 A6 82 A8 -- --  .............. 

 

1行2列の文字列配列、[0 0] = 「あいうえお」、[0 1] = 空文字の場合
  ADDRESS  +0 +1 +2 +3 +4 +5 +6 +7  +8 +9 +A +B +C +D +E +F  0123456789ABCDEF
----------+-------------------------------------------------------------------
  00000000: 00 00 00 01 00 00 00 02  00 00 00 0A 82 A0 82 A2  ................
  00000010: 82 A4 82 A6 82 A8 00 00  00 00 -- -- -- -- -- --  ..........   
Emboar
Certified LabVIEW Developer
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

GCentral
0 Kudos
Message 2 of 3
(167 Views)
Highlighted

Emboar_Dymax様

 

コメントありがとうございます。

How LabVIEW Stores Data in Memoryのリンク先

こういう情報を探しておりました。

 

確認すると、私の認識間違いでした。

 

頭の4バイトがそのセルのバイト数、後から続くのがデータなんですね。

その逆でデータの後にバイト数なのかと勘違いしておりました。

 

また、リトルエンディアンにしていました。よって

あいうえお0E000000

の0Eは次のセルのバイト数でした。

 

文字列の配列をバイナリファイルに書き込むのと

文字列の配列をバンドルして(クラスタにして)バイナリファイルに書き込むのとで

ファイルに違いはありませんでした。

 

情報ありがとうございました!

0 Kudos
Message 3 of 3
(146 Views)