在Python中使用二元运算符... 翻译if (c1 >= "\xc0" & c1 <= "\xdf")
我正在把一个外部的类从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'