NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

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

解決済み
解決策を見る

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

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

 

質問1

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

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

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

 

質問2

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

例)

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

82A082A282A482A682A80E000000

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

 

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

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

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

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

0 件の賞賛
メッセージ1/3
1,442件の閲覧回数
解決策
トピック作成者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 -- -- -- -- -- --  ..........   
Certified LabVIEW Developer
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

GCentral
0 件の賞賛
メッセージ2/3
1,343件の閲覧回数

Emboar_Dymax様

 

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

How LabVIEW Stores Data in Memoryのリンク先

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

 

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

 

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

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

 

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

あいうえお0E000000

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

 

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

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

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

 

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

0 件の賞賛
メッセージ3/3
1,322件の閲覧回数