python ord没有按预期工作

时间:2015-03-17 05:04:02

标签: python ord

所以我正在为一个软件工程课程进行一个Move to Front 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))调用返回10而不是13。我已经确认在mtf文件中我试图解码hexdump确实显示F9 0D我遇到了问题。对于我正在研究的当前测试用例,它只发生在0D作为双字节代码的第二个字节。 0C和返回工作正常,0E和提前工作正常。

任何可能导致此问题的想法?或者解码两字节代码号的其他想法?

编辑:我忘了提到mtf文件已经用latin-1编码了。如果这有所不同。

1 个答案:

答案 0 :(得分:0)

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

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

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

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