应用密码学书籍中的LFSR C代码编译报错ERROR stray \327,求排查
解决LFSR代码编译报错“ERROR stray \327”的问题
嘿,我一眼就揪出问题啦!这个编译错误的根源是你的代码里混进了编译器无法识别的非ASCII特殊字符,再加上还有个括号配对的小问题,咱们一步步来解决:
错误原因分析
报错里的stray \327是编译器在提示你:它遇到了一个不属于标准ASCII编码的乱码字符。看你代码里的0×00000001,这里的×是中文全角的乘号,但C语言里十六进制数的前缀必须是半角的小写x(或大写X),这个全角符号编译器完全认不出来,直接触发了报错。
另外原代码里还有个括号配对错误:在计算异或的部分多写了一个右括号,这也会导致后续编译失败。
修正后的完整代码
int LFSR () { static unsigned long ShiftRegister = 1; /* Anything but 0. */ ShiftRegister = ((((ShiftRegister >> 31) ^ (ShiftRegister >> 6) ^ (ShiftRegister >> 4) ^ (ShiftRegister >> 2) ^ (ShiftRegister >> 1) ^ ShiftRegister) & 0x00000001) << 31) | (ShiftRegister >> 1); return ShiftRegister & 0x00000001; }
关键修改点
- 把所有的
0×替换成了0x(半角小写x) - 移除了异或表达式末尾多余的右括号,保证括号完全配对
- 调整了代码缩进,让结构更清晰(不影响编译,但可读性更好)
现在你再编译这个修正后的版本,应该就能正常通过啦!
内容的提问来源于stack exchange,提问作者Rafael Santana
相关产品推荐
相关产品推荐

