没有按照预期工作,因为它没有正确设置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);
}编辑输入缓冲区(就在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
发布于 2009-12-15 02:25:28
您可能需要"unsigned char *buffer“;这将把零移位到最高位,而不是保留符号位。
发布于 2009-12-15 02:56:42
“它不能正确设置MSB位”。
C标准说:
6.5.7/5 ...如果E1具有带符号的类型和负值,则结果值由实现定义。
请参阅此草案,例如:http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
大概char是在编译器上签名的,所以您应该检查编译器文档,看看MSB的正确值是什么。以及所有其他部分。
https://stackoverflow.com/questions/1902572
复制相似问题