1

MSB ビットが正しく設定されていないため、期待どおりに動作しません。私は Metrowerks コンパイラを使用しています。

//shifting right 5 characters
char * buffer;
buffer=global_buffer;
for(i=0;i<5;i++) //shift right for 1;
{
    buffer[17-i]=(buffer[17-i]>>1)|(buffer[17-i-1]<<7);
}

EDIT入力バッファ(forループ直前) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x2F,0xA0,0xC6,0x9D

for ループ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x17,0xD0,0xE3,0xCE

4

2 に答える 2

9

おそらく「unsignedchar*buffer;」が必要です。これにより、符号ビットを保持するのではなく、ゼロが最上位ビットにシフトされます。

于 2009-12-14T18:25:28.343 に答える
2

「MSBビットが正しく設定されていません」。

C標準は次のように述べています。

6.5.7/5 ... E1 に符号付きの型と負の値がある場合、結果の値は実装定義です。

たとえば、このドラフトを参照してください: http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf

おそらくcharコンパイラで署名されているため、コンパイラのドキュメントをチェックして、MSB の正しい値を確認する必要があります。そして、他のすべてのビット。

于 2009-12-14T18:56:42.413 に答える