見出し画像

iOSとエンディアン

基本的に日々のiOS/macOSアプリ開発でエンディアンについて意識する機会はあまりないが、たとえば外部ハードウェアと連携してなにかするような場合はやっぱりバイト単位でデータを意識する必要が出てきて、そうなるとまたエンディアンを意識せざるを得ない。

で、普段意識してないものだから、いつも「どうだっけ?」とググり直してしまう。

というわけで備忘録的に書いておく。

バイトオーダー

まず基本的なこととして、エンディアンって並び順が変わるんだよな、ということは覚えていたものの、それがどういう粒度で逆さまになるんだっけ?というところから忘れていた。

エンディアンでググると「バイトオーダー」という用語が出てくる。

エンディアン(英: endianness)は、複数のバイトなどを並べる順序の種類である。一般的な用語による表現ではバイトオーダ(英: byte order)、ないしそれを一部訳して日本語ではバイト順とも言う。(Wikipediaより

「エンディアン=バイトオーダー」

ということさえ忘れなければ、バイトの並び順が変わる(ビットの並び順ではない)ということで語弊がなくて良い。

リトルエンディアンとビッグエンディアン

これがまた、どっちがどっちだっけ、というのが混乱する。

たとえば100という値をInt32型(4バイト)で表し、これを16進数で表記すると

0x00000064

となるわけだが、これがどう格納されてたらリトルで、どうだったらビッグなんだっけ、という。

こちらの記事の図がわかりやすかった。

画像2

 (引用元:バイトオーダ - ビッグエンディアン/リトルエディアン

桁の小さい方を0番地から順番に格納していくのがリトルエンディアン、その逆がビッグエンディアン。

iOSのエンディアン

簡単なコードを書いて試してみる。

ここから先は

1,892字
文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

技術的なメモやサンプルコード、思いついたアイデア、考えたこと、お金の話等々、頭をよぎった諸々を気軽に垂れ流しています。

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/