アカデミック 会社 イベント NI Developer Zone サポート ソリューション 製品とサービス お問い合わせ MyNI
1 ratings:
 5 out of 5     Rate this Document

ビッグエンディアンとリトルエンディアンの意味とその変換方法

使用ソフトウェア: LabVIEW Development Systems>>Full Development System
使用ソフトウェア・バージョン: N/A
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: Other NI Software, Calibration Executive, DIAdem, LabVIEW Toolkits, LabWindows/CVI Add-ons, Measurement Studio Add-ons, LabVIEW Modules, LabVIEW Development Systems, LabWindows/CVI Development Systems, Measurement Studio, TestStand, Lookout, MATRIXx

問題: LabVIEWで保存したデータをCで読みとろうとしたのですが、うまくいきません。どうも、「エンディアン」という保存形式に問題があるようなのですが、よくわかりません。サンプルのようなものはありますか?

解決策: エンディアン(Endian)とは、マルチバイトのバイナリ数値を保存する方式のことを指します。
2バイト以上のデータ量を持つ数値データを記録したり転送するときには1バイトごとに分割され、これを最上位のバイト(MSB:Most Significant Bite)から順番に記録/送信する方式を「ビッグエンディアン」、反対に、最下位のバイト(LSB:Least Significant Bite)から順番に記録/送信する方式を「リトルエンディアン」といいます。

例:2バイト(16ビット)のバイナリ数値を、ビッグエンディアン/リトルエンディアン方式で保存する場合を考えます。
1という数字はビッグエンディアン方式(MSB LSB)では(00000000 00000001)とあらわされ、左端(16ビット目)が最上位ビットになります。リトルエンディアン方式(MSB LSB)では(00000001 00000000)とあらわされ、右から8ビット目のデータが最上位ビットになります。


U8で表現した"1" U16で表現した"1" SGL(単精度少数)の場合
LabVIEW:
"ビッグエンディアン" (00000001)   (00000000 00000001)   (Byte4:Byte3:Byte2:Byte1)
(Win) C:
"リトルエンディアン" (00000001) (00000001 00000000) (Byte1:Byte2:Byte3:Byte4)


※アプリケーションや言語によって、リトルエンディアンを使用しているものと、ビッグエンディアンを使用しているものがあり、間違えると、まったく違ったデータとして、解釈してしまうことがあります。上記の場合は、1又は256いずれかに解釈できます。

Windowsなどのインテルチップを使用したコンピュータ(PC)はリトルエンディアン方式を使用しており、Macintoshコンピューターではビッグエンディアン方式を使用しています。LabVIEWは、もともとMacintoshで開発されたため現在でもビッグエンディアン方式をデフォルトとして使用しています。そのため、LabVIEWで保存したバイナリデータをCやほかのWindowsのアプリケーションで読み取るときには、明示的にエンディアンを指定する必要があります。

LabVIEWバージョン8から以下の関数:文字列に平坦化文字列から非平坦化バイナリファイルに書き込むバイナリファイルから読み取るバイト順序という端子があり、任意のエンディアンを指定できます。

LabVIEWバージョン7.1以前のバージョンはビッグエンディアンとリトルエンディアンをプログラムで変換する必要があります。変換方法は、以下に添付したVIを参照してください。bin_file_write.viは、LabVIEWからファイルに書き込むときにバイトの順番を入れ替えることができます。bin_file_read.viはデータを読み取るときに、バイトの順番を入れ替えることができます。タイプキャスト1D配列転置の関数を使用してバイトの順番を入れ替えています。このサンプルは複素数と拡張精度以外のデータタイプすべてに使用できます。また、バイトスワップ関数を使用しても同様のことができます。
テスト用にさまざまなタイプで保存されているデータファイルも添付してあります。bin_data_files.zip はLabVIEWで保存したもの、bin_C_proj.zipはMicrosoft Visual C++で保存したものです。

それぞれのデータビットの詳細についてはLabVIEWヘルプ(ヘルプ→LabVIEWヘルプを検索)の基本機能LabVIEWでメモリにデータを保存する方法を参照してください。


関連リンク: WindowsプラットフォームでC言語で読めるバイナリファイルをLabVIEWでどのように作成するのですか?

添付:


bin_file_write.vi - bin_file_write.vibin_file_read.vi - bin_file_read.vi
bin_data_files.zip - bin_data_files.zip
bin_C_proj.zip - bin_C_proj.zip



報告日時: 05/31/2000
最終更新日: 03/05/2007
ドキュメントID: 1XU8RQPH

Your Feedback! poor Poor  |  Excellent excellent   Yes No
 Document Quality? 
 Answered Your Question? 
  1 2 3 4 5
Please Contact NI for all product and support inquiries.submit