Python和溢出的字节?

10 投票
5 回答
1509 浏览
提问于 2025-04-15 23:35

我需要创建一个变量,它的行为要像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中展示的更多操作,但通过这个例子和文档,你应该能比较清楚地知道如何添加它们。

撰写回答