アカデミック 会社 イベント NI Developer Zone サポート ソリューション 製品とサービス お問い合わせ MyNI
5 ratings:
 4.59 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)  


※アプリケーションや言語によって、リトルエンディアンを使用しているものと、ビッグエンディアンを使用しているものがあり、間違えると、まったく違ったデータとして、解釈してしまうことがあります。

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

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

それぞれのデータビットの詳細については以下のチュートリアル(LabVIEW Data Storage)を参照してください。


関連リンク: Developer Zone Tutorial: LabVIEW Data Storage
KnowledgeBase 10U39NAQ: Writing Binary Files with LabVIEW That Can Be Read by Other Applications
KnowledgeBase 4408RRAC: What Are the Intel and Motorola Byte Orders in NI-CAN?
KnowledgeBase 2MKB41DV: How Can I Read the Binary Representation of a Floating Point Number in 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
最終更新日: 06/15/2009
ドキュメント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