Python中的特殊JS运算符
我正在“破解”我的路由器,需要重写一个JavaScript函数,这个函数的作用是把十六进制格式的日期转换成“年 月 日”的格式。
这个JavaScript代码看起来是这样的:
return [(((n >> 16) & 0xFF) + 1900), ((n >>> 8) & 0xFF), (n & 0xFF)];
这里的 n 是一个变量,格式是0x123456(比如说0x后面有6个十六进制数字)。我发现Python有像 >> 这样的操作符,但没有 >>> 这个操作符。
你有什么想法可以实现这个功能吗?谢谢!
2 个回答
5
使用 >>
这个符号。反正你已经通过 & 0xFF
去掉了符号。注意,你不能省略 & 这一部分,也就是说,(n >> 8) & 0xff 这个写法是必须的,否则你会得到错误的结果,正如你已经提到的那样。
3
首先,你需要知道的是,JavaScript中的位运算符是针对32位的数据进行操作的。而在Python中,它假设数据可以有无限多的位数。
在JavaScript中,'>>'被称为带符号右移,它的效果应该等于
def right_shift(data, bits):
sign = (data >> 31) & 1
if sign:
fills = ((sign << bits) - 1) << (32 - bits)
else:
fills = 0
return ((data & 0xffffffff) >> bits) | fills
而'>>>'在JavaScript中被称为零填充右移。在Python中,由于它总是用零填充,所以你可以直接使用'>>'。为了确保结果和JavaScript一致,还有一种更稳妥的方法
def zero_fill_right_shit(data, bits):
return (data & 0xffffffff) >> bits