0

所以我正在为软件工程课程做一个移至前端编码/解码作业,当使用 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。如果这有所作为。

4

1 回答 1

0

我发现了我的问题的原因。这是由于 Python 以及它如何处理不同风格的编码。它将 '\r' 视为一个新行,因此它以相同的方式处理 '\r' 和 '\n'。因此,当我尝试解码 0x0d 时,它给了我与 0x0a 相同的结果。

我能够通过在打开输入文件时将换行符指定为“”来解决该问题。

input_file = open(input_name, encoding="latin-1", mode="r", newline="")

感谢您对问题的帮助。这是唯一的问题,我的代码现在按预期运行。

于 2015-03-17T17:36:55.390 回答