我正在使用os.read()将文件的二进制内容读入列表。 PyPy似乎已经确定列表中的所有元素都是int类型。是否可以显式注释变量,以便所有元素都被认为是uint64类型?
修改
# Converts 8 characters into a 64 bit unsigned integer
def b64(b):
v = 0
for i in range(8):
v |= ord(b[8-1-i])<<(i*8)
return v
# The file consists of 64-bit values
# The first value is the length of the file
# Then follow exactly that number of 64-bit values
# The latter are stored in a list, and returned from the function
def unpack(data):
l = b64(data)
result = []
offset = 8
for i in range(l):
value = b64(data[offset:offset+8])
assert value >= 0
result.append(value)
offset += 8
return result
f = os.open(argv[1], os.O_RDONLY)
data = os.read(f, 2**32)
os.close(f)
unpacked = unpack(data)
unpack()返回的结果应该是无符号64位值的列表,但是现在它似乎假设它们是带符号的32位值。我试图使用断言,但没有效果。
我需要像result = SomeList<UInt64>
或类似的东西。稍后,我将此列表转换为UInt64列表的列表,并且需要确保相同(我的VM的语义依赖于它)。
答案 0 :(得分:0)
RPython中的普通Python整数转换为N位的有符号值,其中N = 32或64,具体取决于指针大小:
Adding a service worker to your project
如果您需要超出该范围的内容,请使用r_uint
或r_uint64
等变体。