JS中 undefined " |=" 运算在Python中如何实现

Javascript代码:

function rstr2binl(d) {
    for (var a = Array(d.length >> 2), b = 0; b < a.length; b++) {
        a[b] = 0;
    }

    for (b = 0; b < d.length * 8; b += 8){
        a[b >> 5] |= (d.charCodeAt(b / 8) & 255) << b % 32;
    }
    return a
}


Python代码:

def rstr2binl(d):
    a = [0] * (len(d) >> 2)
    for b in range(0, len(a), 1):
        a[b] = 0

    for b in range(0, len(d) * 8, 8):
        a[b >> 5] |= (ord(d[b / 8]) & 255 << b) % 32

    return a

rstr2binl("abc123456")

Python输出:Error list out of range
JS输出:[ 828596833, 892613426, 54 ]


在JS代码中有些步骤是用 undefined |= (d.charCodeAt(b / 8) & 255) << b % 32;
请问在Python中如何实现呢,或者有其他办法达到这个函数的功能吗

阅读 2.2k
1 个回答

因为在js里面不会有列表的下标越界问题,比如

a = [1, 2]
a[0] 输出1
a[1] 输出2
a[2] 输出undefined

在python里如果先定长列表的长度,你去访问a[2]肯定越界了

def rstr2binl(d):
    a = [0] * ((len(d) >> 2) + 1)
    print a
    for b in range(0, len(d) * 8, 8):
        a[b >> 5] |= (ord(d[b / 8]) & 255) << b % 32

    return a
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题