python ord 未按预期工作

python ord not working as expected

所以我正在为一门软件工程课程做移到前面的 Encoding/Decoding 作业,当使用带有 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)) 调用 returns 10 而不是它应该调用的 13 。我已经确认,在我尝试解码的 mtf 文件中,hexdump 确实显示了 F9 0D,我 运行 正在解决这个问题。对于我正在处理的当前测试用例,它只发生在 0D 作为双字节代码的第二个字节时。 0C 及后面工作正常,0E 及前面工作正常。

有什么可能导致这种情况的想法吗?或者解码两个字节代码的其他想法?

编辑:我忘了提到 mtf 文件将以 latin-1 编码。如果这有所作为。

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

我在打开输入文件时将换行符指定为“”,从而解决了这个问题。

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

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