在R和python之间读取二进制文件的差异

时间:2018-08-28 08:53:51

标签: python r binary

我有一个二进制文件,我知道前3个字节应依次为0x6c,0x1b和0x01。 我使用python和R加载文件。

Python: f = open('pathToFile', 'rb') f.read(3) 我得到:out[2] b'l\x1b\x01'

在R中: readBin('pathToFile', what='raw', n=3) 我得到[1] 6c 1b 01

由于我期望b'l'(如R输出所示),因此我在python输出中不理解此6c

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

因此二进制值只是数字。使用list(f.read(3))在python中查看。默认情况下,R和Python仅使用两种不同的表示形式。 R使用hexadecimal,而Python使用ASCII(对于非ascii值,使用\xhh)。造成这种差异的原因是Python是一种通用语言,许多终端(通常是旧的但不是)都使用7位ascii显示输出。 R忽略了这种用法,因为它通常只对原始数据感兴趣。

要获取python中的十六进制表示形式,请使用此bytes子类

class BytesHex(bytes):
    def __repr__(self):
        return ' '.join('{:0>2x}'.format(b) for b in self)

BytesHex(b'l\x1b\x01')
Out[158]: 6c 1b 01