はじめに
業務で実際にBOMに触れるまでエンディアンについて全く意識していなかったので、、、
今回、エンディアンについての記事を投稿しようと思いました。
エンディアンって何?
エンディアンとは2バイト以上のデータのメモリの格納方式を意味する。
バイトオーダーなんて呼び方もある。
PCは基本的に0と1の2進数でデータを管理している。
01001001
例として、ここに0と1だけで構成された8桁の数字があるとする。
1桁を1ビットという単位で扱っていて、8ビットを1バイトとして扱う。
そして、メモリは1バイト単位でデータを取り扱っており、
2バイトのデータを格納する時には2つのメモリにデータを格納する必要がある。
2バイトのデータ: 0x1278
メモリ番地が1000番目、1001番目にある時にデータをどの様に格納していくのか?
1000番目→0x12
1001番目→0x78
先頭のデータからメモリに格納していくというのが一般的な感覚になると思います。
これをビッグエンディアンと呼びます。
リトルエンディアンとはこの逆であり、下位のビットのデータからメモリに格納されていく方式になります。
1000番目→0x78
1001番目→0x12
エンディアンの形式は使うCPUによって異なってくる。
BOMって何?
BOMとはByte Order Markの略です。
BOMはUnicodeで符号化したテキストの先頭に定義される数バイトのデータです。
UnicodeにはUTF-8やUTF-16など様々な符号化形式が存在しており、
このBOMを使ってUnicodeの符号化形式を判別している。
また、Unicodeではビッグエンディアン、リトルエンディアンのどちらの形式も許容している。
どちらの形式も許容しているので、ビッグエンディアンかリトルエンディアンのどちらかを判断する際にもBOMが使われている。
基本的にBOMは必須という訳ではないので、何でもBOMを付与すればいいという訳ではない。
ただ、MicrosoftのExcelではUTF-8のデータを使う時にBOMを使わないと、
文字コードがUTF-8だと認識されずに文字化けをすることがある。
場合によってはBOMを付与する処理がプログラムの中に必要になってくる。
逆にBOMが付与されているファイルの処理を想定していない場合はBOMを取り除く処理が必要になってくる。
この記事のまとめ
ビッグエンディアン、リトルエンディアンとはメモリにデータを格納する時の格納形式。
BOMはUnicodeで符号化したテキストの先頭に定義される数バイトのデータ。