不能正常工作,因为它没有将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
我得到了循环 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x17,0xD0,0xE3,0xCE
答案 0 :(得分:9)
你可能想要“unsigned char * buffer;”这会将零移位到顶部位而不是保留符号位。
答案 1 :(得分:2)
“它没有将MSB位设置正确”。
C标准说:
6.5.7 / 5 ...如果E1具有有符号类型和负值,则结果值是实现定义的。
请参阅此草稿,例如:http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
据推测,char
已在您的编译器上签名,因此您应该检查编译器文档以查看MSB的正确值。以及其他所有内容。