|
サンプル VI に「リトルエンディアン」や「ビッグエンディアン」などの単語が記載されている場合がありますが、この「エンディアン」という単語は何を意味しますか。
LabVIEW で保存したデータを他言語で作成したコードで読みとろうとしたのですが、読み取ったデータが保存したデータと異なります。この「エンディアン」という単語と関係があるのでしょうか。
エンディアン (Endian) とは複数バイトのバイナリ数値をバイト単位で格納する上での方法を示します。
例えば 2 バイトのバイナリ数値の場合、ビッグエンディアン形式では (MSB LSB) と格納され、リトルエンディアン形式では (LSB MSB) と格納されます。ここで MSB は最上位のバイト (Most Significant Byte) LSB は最下位のバイト (Least Significant Byte) を表します。ですので 2 バイトのバイナリ数値が 「1」 の場合、ビッグエンディアン形式で表記するとバイナリ表記では (00000000 00000001) となり左端 (16 ビット目) が最上位ビットになります。一方でリトルエンディアン形式で表記すると (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) |
LabVIEW 8 以降では「文字列に平坦化」、「文字列から非平坦化」、「バイナリファイルに書き込む」、「バイナリファイルから読み取る」の 4 つの関数にビッグエンディアン形式、リトルエンディアン形式を選択できる入力が追加されました。
LabVIEW は複数バイトのデータをビッグエンディアン形式で格納します。LabVIEW は当初 Macintosh OS 上で開発されたため使用しているプラットフォームが Windows (x86) でもビッグエンディアン方式を使用します。リトルエンディアン形式は Intel x86 プロセッサを元に開発されたアプリケーションで使用されています。一方で Motorola プロセッサを元にしたものはビッグエンディアン形式を使用します。C 言語や Windows ベースのアプリケーションは典型的にリトルエンディアン形式で数値データを取り扱うことに注意してください。
LabVIEW Data Storage
KnowledgeBase 2MKB41DV: How Can I Read the Binary Representation of a Floating Point Number in LabVIEW?
|