偶数のインデックス付きバイトをすべて int にコピーするバイトのバッファーへのポインターがあります (データがバッファーに格納されるプロトコルのため、奇数サイクルが読み取り用であることがわかっています)。今私がこれをするとき
signed int a;
...
//inside a loop
a = buffer[2*i]; //buffer is unsigned
それは私に署名されていない番号を与えます。しかし、私がこれを行うとき
a = (int8_t)buffer[2*i]
番号は署名された形式で表示されます。そのため、特に上記のようなシナリオでは、c での符号拡張がどのように機能するかを再考する必要があります。私の理解では、署名済みとして宣言しているので、コンパイラは自動的に符号拡張を行います。なぜそうではないのかを説明するのに時間がかかる人はいますか?私はこのトラップで 1 時間過ごしましたが、今後同じトラップにはまりたくありません。