ActionScript和javascript支持'>>>'运算符。我正在使用python转换base64编码/解码的动作。我知道base64是可用的,这是为了学习的目的。 python没有“...”运算符。 base64 action script>>>运算符在python中
在解码功能你有两行
- O1 =比特>>> 16 & 0xff的;
- o2 = bits >>> 8 & 0xff;
如何将这些行转换为python?
ActionScript和javascript支持'>>>'运算符。我正在使用python转换base64编码/解码的动作。我知道base64是可用的,这是为了学习的目的。 python没有“...”运算符。 base64 action script>>>运算符在python中
在解码功能你有两行
如何将这些行转换为python?
import ctypes
#convert signed to unsigned
bits = ctypes.c_uint32(bits).value
o1 = bits >> 16 & 0xff
o2 = bits >> 8 & 0xff
运算符'>>'在JavaScript中执行与>>>不同的操作,在这种情况下差异很重要。 – 2011-04-18 12:12:42
IINM,>>>
是一个右移,保留最左边的位的值。这具有保持数字的符号完整的效果(即,负数插入1作为他们的MSB而不是0)。
在Python中,整数可以是任意大的。由于位数不受限制,所以没有有意义的最重要的概念。因此,右移只需将所有位向右移动并保留符号。因此,在Python中,您可以使用>>
。
编辑:
由于@Sven Marnach已经指出的那样,>>>
操作做什么,我认为它在Javascript做的正好相反。因此>>>
不保留符号,而>>
似乎这样做。另一个有趣的事实是,在Javascript中显然-1>>1
是-1
而不是0
。不用说,我对JavaScript的了解非常有限,我不确定这些运算符在Python中的确切等效性。
一个选项可能是明确限制正在使用的位数(可能使用ctypes.c_int
),然后在用户定义的右移功能中根据需要手动设置最左边的位。
这是不正确的。 '>>>'does * not * preserve sign:尝试'javascript:alert(-3 >>> 1);' – 2011-04-18 12:31:35
@Sven Marnach:谢谢。我已经更新了答案。 – MAK 2011-04-18 13:21:12
运算符*做了什么*?算术右移? (像'>>>'这样的东西很难Google,所以请*注明*)。 – 2011-04-18 12:08:34
btw。如果你需要Python中的AES,只需使用PyCrypto包。 http://pycrypto.org/ – vartec 2011-04-18 12:14:28
这是一个算术右移(ASR),而不是逻辑右移(LSR)。我仍然希望其中一种语言能够实现旋转指令(ROL和ROR),但是这些指令依赖于确切的位数,并且一些处理器可以让您通过进位位进行旋转,因此会变得杂乱无章。哦,顺便说一句,只要'bits'长度至少为24位,'bits >>> 16&0xff'和'bits >> 16&0xff'是同样的事情,因为'&'运算符执行掩码。另一个等式也一样。在英文中,这些等式仅从较大的整数字段中提取单个字节。 – 2011-04-18 12:20:29