
1.Intelの CPU リトルエンディアンでの、問題です。
バイナリファイルをバイト単位で読込み、これを16ビットの整数にしたいのですが、以下のようにコーディングしましたが、うまくいきません。解決方法をご教示下さい。
char s[2];
short int x; // 16ビットの整数です
// s[0] s[1]に、データを読み込みます。
x = (short)(s[0] + 256 * s[1]);
2.同様の問題で、ビッグエンディアンの場合は、どうすればよいかも、ご教示下さい。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
char s[2];
short int x;
// s[0], s[1]にデータを読み込む
x = (short)((s[0] & 0xff) | ((s1[1] << 8) & 0xff00));
でどうでしょうか?
これはCPUがビッグエンディアンの場合でも同じです。
ファイルへの格納形式がビッグエンディアンの場合、CPUがリトルエンディアンかビッグエンディアンかに関わらず、
x = (short)((s[1] & 0xff) | ((s1[0] << 8) & 0xff00));
とすればよいと思います。
ありがとうございました。
無事、解決いたしました。
ビットシフトを自分なりに考えてやってみていたのですが、単純に足し算したりしてうまくいかなかったので、:-)
まだ、疑問に思っていることがたくさんありますので、よろしくお願いします。
ありがとうございました。
No.3
- 回答日時:
整数演算でもともめるんだったらcharではなくunsigned charにしないと。
最上位ビットがたってたらマイナスになっちゃいます。
シフト演算するんだったらcharでもかまいませんが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
2曲同時再生するにはどうした...
-
干支のプログラム
-
テキストデータをそのままバイ...
-
間接参照のレベルが異なっています
-
文字列から空白を取り除きたい...
-
配列をnビットシフトする
-
CStringをwchar_tに変換したい
-
atoi( ) の反対をやりたい
-
const char** p;のとき、free(p...
-
fgetsについて
-
プログラム
-
文字列配列のほしい部分だけを...
-
C言語のfor文です。 繰り返しの...
-
スタックポインタを使って,1...
-
c++ 文字列を入力して、一文字...
-
c言語でユーザ関数を利用して入...
-
C言語の入力した文字を反転させ...
-
引数の渡し方と受け方(argv)
-
Winsockでの送受信についての質問
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構造体の各メンバにfor文からア...
-
fgetsなどのときのstdinのバッ...
-
文字列から空白を取り除きたい...
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
間接参照のレベルが異なっています
-
c++ 文字列を入力して、一文字...
-
C言語の入力した文字を反転させ...
-
charからLPTSTRへの変換方法
-
ネットワークにつながっている...
-
'const char *' 型は 'char *' ...
-
テキストデータをそのままバイ...
-
c言語でユーザ関数を利用して入...
-
atoi( ) の反対をやりたい
-
間接操作のレベルとは
-
-'0'の意味について
-
double型の値をchar配列に変換...
-
Linuxでフォルダ内全ファイル名...
-
配列をnビットシフトする
-
型変換
おすすめ情報