「自分のパソコンのエンディアンを知りたい!」
そんな方はまず下の記事をご覧ください。
今回は 自分でリトルエンディアンに変換します!
コードが知りたい方は目次のソースコードへ飛んでください!
本記事のテーマ
【完全初心者向け】リトルエンディアンに変換!
リトルエンディアンとは、
リトルエンディアン(littele endian)
ー 最下位ビットが存在するbyteを低位のアドレスへ格納していく方式(バイナリダンプでは「逆順」で見える)
リトルエンディアン変換!
アルゴリズム
リトルエンディアン変換プログラム作成
1. 下位8ビットをアンドマスクで取り出す
2. 8ビット右シフトを行い、1、2を繰り返す。
3. 順次、アンドマスクで取り出したビットを変数に格納し、8ビット左シフトを繰り返す
リトルエンディアン変換プログラム実装!
←int型の16進数を宣言
2. int and_mask = 0xff;
←下位8ビットのアンドマスクを宣言
3. while(src != 0x00){
←srcが0x00になるまでループ
4. little_endian += (src & and_mask);
←下位8ビットを取り出す
5. src = src >> 8;
←8ビット右シフトでかい8ビットを削除
6. little_endian = little_endian << 8;
←8ビット左シフトで下位ビットを上位ビットへ移動
code
while(src != 0x00){
little_endian += (src & and_mask);
printf("0x%x\n", little_endian);
src = src >> 8;
little_endian = little_endian << 8;
}
出力
0x78
0x7856
0x785634
0x78563412
完成です!
リトルエンディアン変換プログラムを実装しました。
ビットシフトをうまく使うことで簡単に実装できました。
私が苦しまされたエンディアン問題、皆さんもエンディアンには注意して下さい!
main文を含む全ソースコードは以下に示します。
ソースコード
#include <stdio.h>
void enshu0613(void);
int main() {
enshu0613();
return 0;
}
void enshu0613(void){
int src = 0x012345678;
int little_endian=0x00;
int and_mask = 0xff;
while(src != 0x00){
little_endian += (src & and_mask);
printf("0x%x\n", little_endian);
src = src >> 8;
little_endian = little_endian << 8;
}
}