我有这个函数将7位字符序列转换为它代表的实际字符(ASCII)。因此,例如,取字符串“1001110”,该函数应返回“N”。
char bits_to_char(char* bits)
{
byte ret = 0;
int i = 0;
for(i = 0; i < CHAR_SZ; i++){
if(bits[i] == '1'){
ret++;
}
(ret << 1) && 0xFF;
}
return (char) ret;
}
Ret上的左移不会发生。当我使用我的调试器逐步完成它时,它只是完全跳过它。我尝试在continue
增加后添加ret
,但它没有改变任何内容。
答案 0 :(得分:3)
该行
(ret << 1) && 0xFF;
最好进行操作并丢弃结果。
合理的编译器会发现并优化它
答案 1 :(得分:0)
应在递增ret
的值之前完成位移。只有在将字符串转换为值时才需要转换为大写:
unsigned char bits_to_char(const char* bits)
{
unsigned ret = 0;
size_t size = strlen(bits);
int i;
for(i = 0; i < size; i++){
ret <<= 1;
if( bits[i] == '1'){
++ret;
}
}
return (unsigned char) (ret & 0xFF);
}