質問編集履歴
1
本文内のですます口調の統一 / 前提にホストはリトルエンディアンであることを追記 / 何が問題なのか?を追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
|
-
Ubuntu20.10(Dockerコンテナ)上でホストバイトオーダーを求めようと考えました。一般的にはシェルで簡単に求められると思うのですが、今回はhtonl / ntohl を使って判別
|
2
|
+
Ubuntu20.10(Dockerコンテナ)上でホストバイトオーダーを求めようと考えました。一般的にはシェルで簡単に求められると思うのですが、今回はhtonl / ntohl を使って判別するケースを考えたいです。また、ホストはx86_64であるためリトルエンディアンであると前提します。
|
3
3
|
|
4
4
|
### 該当のソースコード
|
5
5
|
|
@@ -11,9 +11,9 @@
|
|
11
11
|
|
12
12
|
int main() {
|
13
13
|
unsigned int x = 0xAABBCCDD;
|
14
|
-
//
|
14
|
+
// htonlはネットワークバイトオーダー(ビッグエンディアン)に
|
15
|
-
//
|
15
|
+
// ntohlはネットワークバイトオーダーの値をホストのエンディアンに変換する
|
16
|
-
// すなわち
|
16
|
+
// すなわち htonl(x) == ntohl(x) であればホストバイトオーダーはビッグエンディアンである
|
17
17
|
printf("ホストバイトオーダーは");
|
18
18
|
if (htonl(x) == ntohl(x)) {
|
19
19
|
printf("big endian\n");
|
@@ -30,17 +30,17 @@
|
|
30
30
|
root@a6bb7bfe96dd:~# ./a.out
|
31
31
|
ホストバイトオーダーはbig endian
|
32
32
|
```
|
33
|
-
上記プログラムからはビッグエンディアンであると言われ
|
33
|
+
上記プログラムからはビッグエンディアンであると言われます。
|
34
34
|
|
35
35
|
### 何が問題なのか?
|
36
|
-
同ホスト上でodコマンドを使ってエンディアンを求めると、リトルエンディアンであることが確認される。
|
36
|
+
同ホスト上でodコマンドを使ってエンディアンを求めると、リトルエンディアンであることが確認されます。私が該当のソースコードに書いたコードはホストがビッグエンディアンという結果を出していることが今回の問題です。
|
37
37
|
```
|
38
38
|
root@a6bb7bfe96dd:~# echo -n "1234ABCD" | od -t x
|
39
39
|
0000000 34333231 44434241
|
40
40
|
0000010
|
41
41
|
```
|
42
42
|
|
43
|
-
同様に下記のエンディアンを求めるプログラムからもリトルエンディアンであると言われ
|
43
|
+
同様に下記のエンディアンを求めるプログラムからもリトルエンディアンであると言われます。
|
44
44
|
```c
|
45
45
|
|
46
46
|
#include <stdio.h>
|