>>>>> python 中的运算符

发布于 2024-11-02 05:09:21 字数 404 浏览 0 评论 0原文

ActionScript 和 javascript 支持“>>>”操作员。我正在使用 python 转换 base64 编码/解码的动作脚本。我知道 Base64 可用,这是出于学习目的。 python 没有“...”运算符。 base64 操作脚本

在解码函数中有两个行

  1. o1 = 位 >>>>> 16& 0xff;
  2. o2 = 位>>>> 8& 0xff;

如何将这些行转换为Python?

ActionScript and javascript supports '>>>' operator. I am converting an actionscript of base64 encoding/decoding using python. I know base64 is available and this is for learning purpose. python doesn't have "..." operator.
base64 action script

in decode function you have two lines

  1. o1 = bits >>> 16 & 0xff;
  2. o2 = bits >>> 8 & 0xff;

How do I convert these lines into python?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

留一抹残留的笑 2024-11-09 05:09:21

IINM,>>> 是右移,保留最左边位的值。这具有保持数字符号完整的效果(即负数插入 1 作为其 MSB,而不是 0)。

在 Python 中,整数可以是任意大。由于位数不受限制,因此最高有效位没有有意义的概念。因此,右移只是将所有位向右移动并保留符号。因此,在 Python 中您可以只使用 >>

编辑:

正如 @Sven Marnach 所指出的, >>> 操作的作用与我认为在 Javascript 中所做的完全相反。因此 >>> 不保留符号,而 >> 似乎这样做。另一个有趣的事实是,显然 -1>>1 在 Javascript 中是 -1 而不是 0。不用说,我对 Javascript 的了解非常有限,而且我不确定这些运算符在 Python 中的确切等价物是什么。

一种选择可能是显式限制正在使用的位数(可能通过使用 ctypes.c_int ),然后根据用户定义的右移函数的需要手动设置最左边的位。

IINM, >>> is a right shift that preserves the value of the leftmost bit. This has the effect of keeping the sign of the number intact (i.e. negative numbers get a 1 inserted as their MSB instead of a 0).

In Python, integers can be arbitrarily big. There is no meaningful concept of a most significant bit since the number of bits is not bounded. Right shifts therefore simply shift all bits to the right and preserve the sign. So, in Python you can just use >>.

Edit:

As @Sven Marnach has pointed out, the >>> operation does the exact opposite of what I thought it did in Javascript. Thus >>> does not preserve sign, while >> appears to do so. Another interesting fact is that apparently -1>>1 is -1 and not 0 in Javascript. Needless to say, my knowledge of Javascript is really limited and I am not sure what the exact equivalent of these operators are in Python.

One options might be to explicitly limit how many bits are being used (perhaps by using ctypes.c_int) and then set the left most bit manually as desired in a user defined right shift function.

孤独患者 2024-11-09 05:09:21
import ctypes
#convert signed to unsigned
bits = ctypes.c_uint32(bits).value

o1 = bits >> 16 & 0xff
o2 = bits >> 8 & 0xff
import ctypes
#convert signed to unsigned
bits = ctypes.c_uint32(bits).value

o1 = bits >> 16 & 0xff
o2 = bits >> 8 & 0xff
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文