ネットワークパケットを介して短いintを受信しています。つまり、ネットワークバイトオーダー(ビッグエンディアン)で2バイトとなります。2バイトをCの短いintに結合する
受信した2バイトをマシン上のshort int変数に結合したいと思います。これはリトルエンディアンのバイトオーダーです。
例:
short int test = 400; //0x190 in big endian, 0x9001 in little endian
char testResponse[2] = {0x01, 0x90};
//here is my attempt
short int result = testResponse[1] << 8 | testResponse[0];
printf("%d\n", result); //-28671 when expecting 400
任意の助けいただければ幸いです!
あなたの問題は何であるのだろうか? – Olaf
2つの数字を結合する方法は、ORよりも8ビットの左シフトのように見えますが、これは正しい結果を出すようには見えませんので、ビット演算が間違っていることを誰かが知っているのだろうかと思います。 –
Cには「8ビットの左シフト」はありません。存在した場合、シフトカウントが「8」の場合、未定義のビヘイビアが呼び出されます。整数型のプロモーションの対象になる可能性が高いです。また、固定幅の符号なしの型を使用します。 'char'は符号なしであることが保証されておらず、8ビットであることも保証されていません。今削除された答えのあなたのコメントによると、私たちはすべての関連情報が必要です。または、私が言ったように正しいコードを取得します。 – Olaf