他のアプリケーションでLabVIEWバイナリファイルが読み取れない

更新しました Aug 1, 2019

使用製品

Software

  • LabVIEW Professional
  • LabVIEW Full
  • LabVIEW Base

問題

WindowsでLabVIEWを使用しています。 LabVIEWで作成したバイナリファイルデータを他の言語で作成されたアプリケーションで読み取ると、データは正しく読み取れません。データを読み取るプログラムは、各フィールドに正確なバイトを読み取っています。WindowsプラットフォームにおいてC言語(もしくは他言語)で読めるバイナリファイルをLabVIEWで作成するにはどうすればよいですか?

解決策

LabVIEWは、バイナリファイルのバイト順序にビッグエンディアン形式を使用しますが、ほとんどのWindowsプログラムはリトルエンディアン形式を使用します。
 

Windowsプログラムを使用してバイナリファイルを読み取る場合は、バイナリファイルに書き込む関数のバイト順序入力をlittle-endianにする必要があります。


 


適切なエンディアン形式を使用してファイルにデータを書き込む方法は、ヘルプ>>サンプルを検索>>基本機能>>ファイルの入力と出力>>バイナリ>>バイナリファイルに関するエンディアンの注意事項というサンプルを参照してください。

追加情報

LabVIEWがMacOSと同じようにビッグエンディアン形式を使用していた理由は、LabVIEWが最初にMacOS用に作成されたからです。
 

ビッグエンディアン形式で、マルチバイト値の最上位バイト(MSB)が先に書き込まれ、次の第2番目のMSB、そして最下位バイト(LSB)の順番に書き込まれます。しかしリトルエンディアンでは、バイトの順番が逆です。最初に最下位バイト(LSB)で、次に第2のLSB、そして最上位バイト(MSB)の順に書き込まれます。
 

例:

  a U8 "1"a U16 "1"単精度値
LabVIEW:ビッグエンディアン(00000001)(00000000 00000001)(バイト4:バイト3:バイト2:バイト1)
(Win) C:リトルエンディアン(00000001)(00000001 00000000)(バイト1:バイト2:バイト3:バイト4)


バイト順序は、文字列に平坦化関数および文字列から非平坦化関数を使用した場合でも指定することができます。

この記事はお役に立ちましたか?

いいえ