R和python在读取二进制文件方面的差异

R和python在读取二进制文件方面的差异,python,r,binary,Python,R,Binary,我有一个二进制文件,我知道前3个字节应该是0x6c、0x1b和0x01,按顺序排列。 我使用python和R加载文件 Python: f=打开('pathToFile','rb') f、 读(3) 我得到:out[2]b'l\x1b\x01' 在R: readBin('pathToFile',what='raw',n=3) 我得到了[1]6c 1b 01 我不理解python输出中的b'l',因为我期望6c(如R输出所示) 我做错了什么?所以二进制值只是数字。使用list(f.read(

我有一个二进制文件,我知道前3个字节应该是0x6c、0x1b和0x01,按顺序排列。 我使用python和R加载文件

Python:

f=打开('pathToFile','rb')
f、 读(3)
我得到:
out[2]b'l\x1b\x01'

在R:

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

我不理解python输出中的
b'l'
,因为我期望
6c
(如R输出所示)


我做错了什么?

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

要获得python中的十六进制表示,请使用此
字节
子类

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

谢谢!这解释了很多。我刚刚注意到,我也可以用
f.read(3).hex()
快速转换。你教了我一些东西。甚至不知道这个方法的存在!