【发布时间】:2012-02-01 17:14:56
【问题描述】:
我认为我对 Python 的了解足以编写一个基本的chip8 模拟器,但似乎我错了。
我基本上在从内存读取/写入字节时遇到问题。 在程序的某个时刻,我需要将我已经从文件中读取并存储在列表中的单个字节读取到变量中。 这就是我从文件中读取的方式:
byte = rom.read(1)
memory.append(byte)
while byte:
byte = rom.read(1)
memory.append(byte)
rom.close()
在程序的某个时刻,我需要从内存中获取一个字节,并将其与 0x80 移位某些数字(以提取单个位),所以我使用:
for i in range(h):
p = ord(memory[addressI + i])
for j in range(8):
if(p & (0x80 >>j)) != 0:
...
它工作了一段时间,但我突然得到了这个错误:
(...)p = ord(memory[addressI + i])
TypeError: ord() expected string of length 1, but int found
如果我根本不使用 ord 函数,我会得到这个错误,正如预期的那样:
TypeError: unsupported operand type(s) for &: 'str' and 'int'
我认为我收到此错误是因为在程序中的某个时刻我将存储值的 BCD 存储在内存中。我猜它替换了以前为 int 存储的字节类型。
data = registers[sNum>>8]
memory[addressI] = data/100
memory[addressI + 1] = (data/10) % 10
memory[addressI + 2] = data % 10
可能的解决方案是: 1 - 将计算为单个字节的 int 正确存储在“模拟”chip8 内存的列表中 2 - 使用函数或奇迹代替 ord() 获取数据并将其存储为单个字节
任何帮助将不胜感激。 顺便说一句,我使用的是 windows 并在 Python 2.7.2 和 3.2.2 中测试了这段代码。
【问题讨论】:
-
“你做错了” - 首先,请使用 python 数组而不是列表来将数据保存在内存中。数组位于名为“array”的标准库模块中
-
好吧,您自己诊断了问题并提供了有效的解决方案,所以我不确定您的问题是什么。我要做的是只在内存列表/数组中存储数字。
-
@jsbueno 好吧,我想我会试试的。
-
@interjay 我的问题更像是:“我该怎么做?”...据我所知,我不能只在内存列表中存储数字,因为我从文件中读取了所有数据并且它们不会仅仅使用 int() 函数就变成整数。还是谢谢
-
@Bruno:我的意思是在读取文件后调用
ord。