teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

本文内のですます口調の統一 / 前提にホストはリトルエンディアンであることを追記 / 何が問題なのか?を追記

2021/01/21 05:01

投稿

self-taught-cs
self-taught-cs

スコア11

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
- // htonsはネットワークバイトオーダー(ビッグエンディアン)に
14
+ // htonlはネットワークバイトオーダー(ビッグエンディアン)に
15
- // ntohsはネットワークバイトオーダーの値をホストのエンディアンに変換する
15
+ // ntohlはネットワークバイトオーダーの値をホストのエンディアンに変換する
16
- // すなわち htons(x) == ntohs(x) であればホストバイトオーダーはビッグエンディアンである
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>