質問: 組み込み技術者のたまごです。 マルチバイト文字を扱う場合、メモリの配置がリトルエンディアンとビッグエンディアンがあります。 ある組み込み技術に関する本を読むと > > ビッグエンディアンの方が人間にとって読みやすいが、リトルエンディアンの方がコンピューターにとっては読みやすい。 > > > と記載がありました。 ビッグエンディアンの方が人間によって読み易いというのは理解できるのですが、どうしてリトルエンディアンの方がコンピューターにとっては読みやすいのでしょうか? そのあたりの説明が、本やネットでは見つからず、理由を知りたいと思っています。 有識者の方おられましたら回答頂けましたら嬉しいです。
回答: マルチバイト文字は、一般的には1バイト単位の文字の並びなので、その文脈においてエンディアンが関係することはまずありません。UTF-16やUTF-32についてはエンディアンの規定がありますが。 > > ビッグエンディアンの方が人間にとって読みやすいが、リトルエンディアンの方がコンピューターにとっては読みやすい。 > > > その認識は誤りです(コンピューターにとっての読みやすさって何? という疑問がわきませんか?)。コンピューターにとってはエンディアンがどっちであろうと関係ありません。現にARMやMIPS、PowerPCなど、どちらのエンディアンにも切り替え可能なCPUは多いです。 そうではなくて、人間(プログラマー)にとって、ビッグエンディアンは「読みやすいが扱いにくい」、リトルエンディアンは「読みにくいが扱いやすい」というのが正確でしょう。 扱いやすさとはどういうことかというと、例えばC言語でこんなコードを書いたとします。 ``` union { short sh; char ch; } hoge; hoge.sh = 0; hoge.ch = 100; printf("%d\n", hoge.sh); ``` リトルエンディアンだと`100`と表示されますが、ビッグエンディアンだと`25600`になります。つまり、リトルエンディアンだと桁の位置とメモリ上の格納場所が一致するので素直にプログラムが書けるのですが、ビッグエンディアンだとそれが一致しなくなるので、プログラムを作るにおいて特段の配慮が必要になるわけです。