Python和溢出的字节?
我需要创建一个变量,它的行为要像C语言中的变量一样。我需要一个字节类型或者无符号字符类型,范围是0到255。这个变量应该会发生溢出,也就是说...
myVar = 255
myVar += 1
print myVar #!!myVar = 0!!
5 个回答
5
ctypes
模块提供了你需要的功能,不过用起来有点复杂。比如说:
>>> import ctypes
>>> ctypes.c_ubyte(255)
c_ubyte(255)
>>> ctypes.c_ubyte(255 + 1)
c_ubyte(0)
这也适用于有符号的类型:
>>> ctypes.c_byte(127 + 1)
c_byte(-128)
你可以把这个对象解包,得到原始的整数,方法是:
>>> ctypes.c_byte(127 + 1).value
-128
5
你需要用 myVar &= 0xFF
这个操作来确保它的值保持在0到255之间。
通常来说,你可以对这个数字进行很多操作,只要在打印、发送给用C语言写的方法,或者其他需要它在8位范围内的地方之前,记得进行掩码处理。
9
这里有很多不错的回答。不过,如果你想创建自己的类型,就可以看看Python 数据模型文档。里面讲了如何制作具有自定义行为的类,比如说模拟数字类型。
根据这些信息,你可以这样创建一个类:
class Num:
def __init__(self, n):
self.n = (n % 256)
def __repr__(self):
return repr(self.n)
def __add__(self, other):
return Num(self.n+int(other))
# transform ourselves into an int, so
# int-expecting methods can use us
def __int__(self):
return self.n
然后你可以做一些这样的事情:
>>> a = Num(100)
>>> print a
100
>>> b = a + 50
>>> print b
150
>>> c = Num(200)
>>> d = a + c
>>> print d
44
我知道你可能想支持比我在Num
中展示的更多操作,但通过这个例子和文档,你应该能比较清楚地知道如何添加它们。