在Python中使用二元运算符... 翻译if (c1 >= "\xc0" & c1 <= "\xdf")

1 投票
3 回答
1063 浏览
提问于 2025-04-17 15:15

我正在把一个外部的从PHP转换成Python,这个类做了一些特别的操作,比如:

if ($c1 >= "\xc0" & $c1 <= "\xdf")
[...]
$cc1 = (chr(ord($c1) / 64) | "\xc0");
[...]
$cc2 = ($c1 & "\x3f") | "\x80";

这里的$c1、^$cc1和$cc2都是字符

我刚意识到在Python中不能这样使用,因为字符在Python里是字符串,而不是像在PHP中那样可以被看作“字符的二进制表示”,在这种情况下,&和|这些操作符才有意义……

请问,如何用Python的方式来实现这些操作呢?

>>> c1 = "a"
>>> (c1 & "\x3f") | "\x80"

Traceback (most recent call last):
  File "<pyshell#202>", line 1, in <module>
    (c1 & "\x3f") | "\x80"
TypeError: unsupported operand type(s) for &: 'str' and 'str'

补充:实际上,这个PHP类似乎并不好用,所以也不适合我的需求。非常感谢你的帮助。

3 个回答

1
Python 2.7.3 (default, Sep 26 2012, 21:51:14) 
>>> c1 = 'd'
>>> # if ($c1 >= "\xc0" & $c1 <= "\xdf")
... 
>>> ord(c1) >= 0xc0 and ord(c1) <= 0xdf
False
>>> # $cc1 = (chr(ord($c1) / 64) | "\xc0");
... 
>>> chr(ord(c1) / 64 | 0xc0)
'\xc1'
>>> # $cc2 = ($c1 & "\x3f") | "\x80";
... 
>>> ord(c1) & 0x3f | 0x80
164
>>> 

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言进行解释。

1

这是一个简单的UTF-8编码函数。

c1.encode('utf-8')

请注意,除非你直接使用unicode(要不然你为什么不这样做呢?),否则你需要先从'latin-1'进行解码。

1

使用 ord 函数可以获取字符的数值,然后用实际的数字来进行掩码处理。

>>> c1 = "a"
>>> (ord(c1) & 0x3f) | 0x80
161
>>> hex((ord(c1) & 0x3f) | 0x80)
'0xa1'

撰写回答