python语言的死循环问题

Brightzliu 2009-04-24 07:13:17
C语言代码
UINT16 checksum(UINT8* data, int length)
{
// CRC-CCITT CRC checksum generation
/* Importan: x86 is little endian,how about ARM? */
UINT8 i;
UINT16 crc = 0; //

while(length--)
{
for(i=0x01; i!=0; i<<=1)
{
if((crc&0x0001)!=0)
{
crc>>=1;
crc^=0x8408;
}
else
{
crc>>=1;
}
if((*data&i)!=0)
crc^=0x8408;
}
data++;
}

return crc;
}
我将上面程序转换成python,怎么陷入了死循环啊?
def fun(strData,length):
length = len(strData)
print length
j = 0x01
crc=0
for i in range(0,length):
j = 0x01
while j !=0: ####在while中陷入死循环,why?
if crc&0x001 != 0:
crc= crc>>1
crc= crc^0x8408
else:
crc = crc>>1
if ord(strData[i])& j!= 0:
crc = crc^0x8408
j = j<<1
print "run here?:" #########运行不到这个地方
i = i + 1
print "Arrive here2?"
return crc
...全文
387 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Brightzliu 2009-04-27
  • 打赏
  • 举报
回复
while j !=0:改为 while j<pow(2,31):
Brightzliu 2009-04-27
  • 打赏
  • 举报
回复
为什么要 将j= j<<1换成j=j/2 呢?

while j!=0
换成
while j!=0x100 为什么也要这样换呢?
wdx04 2009-04-27
  • 打赏
  • 举报
回复
C程序中i声明为8位无符号整数,因此i=0x80时再<<1就变成0,也就是说循环将在i=0x80时终止。而在Python中整型数值没有长度限制,0x80<<1结果为0x100,所以把0改为0x100可以达成与C程序一样的循环次数。具体你可以自己调试。
guzl86 2009-04-26
  • 打赏
  • 举报
回复
j = j < <1
改为
j = j / 2
wdx04 2009-04-25
  • 打赏
  • 举报
回复
while j!=0
换成
while j!=0x100
sharp_future 2009-04-25
  • 打赏
  • 举报
回复
定义个范围吧 不然真的循环下去了。
Brightzliu 2009-04-25
  • 打赏
  • 举报
回复
那怎么讲上面的代码改过来啊?
谢谢啊
dododunk 2009-04-24
  • 打赏
  • 举报
回复
debug进去不就ok了吗,找pyscripter这种有UI的开发工具,

j=j<<1 ======>在python里int 类型是无穷大,所以这个语句使j一直大下去了。

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧