所以我正在为软件工程课程做一个移至前端编码/解码作业,当使用 Python 3.3 的内置 ord() 函数时,它似乎在我的代码中的某个点返回了错误的值。
当我们想要对 1-120 的编码数字进行编码时,只需将该代码数字添加到 128。对于 121 和 375 之间的数字,我们使用两个字节,第一个是 F9 表示后面的一个字节是代码数字的一部分,第二个是实际的代码编号(使用代码# - 128 编码)。因此,例如 121 将是 F9 00。
解码时我遇到了一个问题,在读取 F9 并进入解码第二个字节的代码后,我遇到了 ord 函数的问题。
我的代码是:
def decode_num(base_num, input_file):
if base_num <=248:
#coding for if the code is simply a one byte code from 1-120(will have been coded as 248)
return base_num-128
elif base_num == 249:
#coding for if the code is a two byte code, thus the first byte of the code will be 121
second_byte=ord(input_file.read(1))
return second_byte+121
它似乎工作正常,直到它达到 134 的编码,这应该是 F9 0D。ord(input_file.read(1)) 调用返回 10 而不是应有的 13。我已经确认在我试图解码的 mtf 文件中,hexdump 确实显示了我遇到问题的 F9 0D。对于我正在处理的当前测试用例,它仅以 0D 作为双字节代码的第二个字节出现。0C 和后面工作正常,0E 和前面都工作正常。
关于可能导致这种情况的任何想法?还是解码两个字节码数的替代方法?
编辑:我忘了提到 mtf 文件将被编码为 latin-1。如果这有所作为。