我认为我知道Python足以编程一个基本的chip8仿真器,但似乎我错了。Python - 字节读/写和按位与
我基本上有问题来读/写字节和内存。 在程序的某个点上,我需要读取一个变量,我已经从一个文件中读取了一个字节并存储在一个列表中。 这是我从文件中读取:
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 funcion我得到这个错误,因为EXPEC特德:
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 - 妥善保存在列表中的单字节计算,“模仿”的chip8内存INT 2 - 使用功能或一个奇迹,而不是ORD()即得到什么该数据是并将其作为单个字节存储
任何帮助,将不胜感激。顺便说一下,我使用的是windows,并在Python 2.7.2和3.2.2中测试了这段代码。
“你做错了” - 首先,请使用蟒蛇阵列而不是列表中的内存来保存你的数据。数组被命名为“阵”标准库模块中 – jsbueno 2012-02-01 17:27:52
嘛,你自己找出问题所在,并提出有效的解决方案,所以我不知道你的问题是什么。我会做的只是将数字存储在内存列表/数组中。 – interjay 2012-02-01 17:30:20
@jsbueno嗯,我想我会试试看。 – 2012-02-01 18:47:11