iOSとエンディアン
基本的に日々のiOS/macOSアプリ開発でエンディアンについて意識する機会はあまりないが、たとえば外部ハードウェアと連携してなにかするような場合はやっぱりバイト単位でデータを意識する必要が出てきて、そうなるとまたエンディアンを意識せざるを得ない。
で、普段意識してないものだから、いつも「どうだっけ?」とググり直してしまう。
というわけで備忘録的に書いておく。
バイトオーダー
まず基本的なこととして、エンディアンって並び順が変わるんだよな、ということは覚えていたものの、それがどういう粒度で逆さまになるんだっけ?というところから忘れていた。
エンディアンでググると「バイトオーダー」という用語が出てくる。
エンディアン(英: endianness)は、複数のバイトなどを並べる順序の種類である。一般的な用語による表現ではバイトオーダ(英: byte order)、ないしそれを一部訳して日本語ではバイト順とも言う。(Wikipediaより)
「エンディアン=バイトオーダー」
ということさえ忘れなければ、バイトの並び順が変わる(ビットの並び順ではない)ということで語弊がなくて良い。
リトルエンディアンとビッグエンディアン
これがまた、どっちがどっちだっけ、というのが混乱する。
たとえば100という値をInt32型(4バイト)で表し、これを16進数で表記すると
0x00000064
となるわけだが、これがどう格納されてたらリトルで、どうだったらビッグなんだっけ、という。
こちらの記事の図がわかりやすかった。
(引用元:バイトオーダ - ビッグエンディアン/リトルエディアン)
桁の小さい方を0番地から順番に格納していくのがリトルエンディアン、その逆がビッグエンディアン。
iOSのエンディアン
簡単なコードを書いて試してみる。
最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/