提示コードですがアドレスが大きい順番にならんでいるのでリトルエンディアン方式です。提示コードのd配列の4バイトをint型に変換したいのですがビット演算式が検索しても出てこないため困っています。参考質問のコードを入力して電卓と結果しましたが結果が違います。どういった式なのでしょうか?
参考質問: https://teratail.com/questions/314799
cpp
1 2int convInt(unsigned char* header, int start) 3{ 4 int ret = (header[start + 3] << 24) | (header[start + 2] << 16) | (header[start + 1] << 8) | (header[start + 0]); 5 printf("あああ %d\n", ret); 6 return ret; 7} 8 9int main() { 10 unsigned char d[4] = { 0x00, 0x00, 0x20, 0x00 }; 11 12// printf("%x",&d); 13 convInt(d,0); 14 15 return 0; 16}
でたらめなコードを書いてごまかすのではなく、過去にいただいた質問回答をもう一度ちゃんと当たってみなさい。
確認したいのですが結果が電卓と合いません
基本的な演算すら理解出来ないなら、そもそも質問するレベルに達してないのでは。
回答を貰ったところで理解出来ると思えない。
C言語入門の参考書を確認しましたが説明がありません。ビット演算について乗っていますが
C言語より先にコンピューターサイエンス勉強した方が良いのでは?
そういう世界の話になるのですかこの問題は
そういう世界というか、電子情報分野の基礎知識ですが。
そうなのですか。C言語入門の本にも乗ってないので質問しました。
それ即ち、以前にいただきBAも付けた回答を理解していなかったということです。これに始まった訳では無いでしょうけれども。回答を無駄に消費されるのはこりごりなので少なくとも私は回答しませんし、以降はスルーさせていただきます。
どう計算したらこれが 512 になるんだ。
それでどこがリトルエンディアンなんだ。
512 なら 0x200 だからリトルエンディアンだと 00 02 00 00 になる。
20 どこいった。
演算にしても検索したらいくらでも情報出てくると思うけど、何故検索せずに質問する?
前の質問のベストアンサーにほぼ同じ内容のことが書かれてた。
読めよ。
0, 0, 0x20, 0
は
0x00, 0x00, 0x20, 0x00
であり、どこをとっても0x0200(電卓で表示している値)にはなりません
電卓に表示しているHEXの「200」とは何の数字なんでしょうか
なるほど。0x00 0x00 0x20 0x00と入力しましたが値が2097152 となるのですが電卓と値が一致しません。
まず前の質問の回答読めよ。
何が「なるほど」なのか。いい加減にしなさい。
10進数512、16進数0x0200 は、{0x20, 0}の見た目上の並びをそのまま0x200と見誤ってるんでしょう。
回答4件
あなたの回答
tips
プレビュー