Python s以及常见的转义,如'\n',如果可能,只对其他值使用十六进制反斜杠转义。
您可以很容易地看出文件实际上有8个字节,与您期望的8个字节相同(Python s以及常见的转义,如'\n',如果可能,只对其他值使用十六进制反斜杠转义。,python,numpy,notepad++,hexdump,Python,Numpy,Notepad++,Hexdump,您可以很容易地看出文件实际上有8个字节,与您期望的8个字节相同(01 00 00 2C 01 00),只需使用记事本++以外的任何东西查看文件,包括仅将您的off=np.fromfile(fileobj2,dtype=np.int32)替换为off=fileobj2.read(),然后printing字节(这将为您提供b'\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00'`*) 而且,从你的评论来看,在我提出这个建议之后,你尝试过,并且看到了这一点 这意味
01 00 00 2C 01 00
),只需使用记事本++以外的任何东西查看文件,包括仅将您的off=np.fromfile(fileobj2,dtype=np.int32)
替换为off=fileobj2.read(),然后
printing字节(这将为您提供
b'\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00'`*)
而且,从你的评论来看,在我提出这个建议之后,你尝试过,并且看到了这一点
这意味着这要么是记事本++中的一个bug,要么是您使用它的方式有问题;Python、NumPy和您自己的代码都非常好
*如果不清楚:
'\x2c'
和,“
是同一个字符,字节
对可打印的ASCII字符使用可打印的ASCII表示,以及常见的转义,如'\n'
,如果可能,仅对其他值使用十六进制反斜杠转义。首先,一个int32
需要4个字节,而不是2个字节。接下来,除了记事本++之外,您是否尝试过在其他程序中读取该文件?你可以很容易地在Python中完成它;不要使用off=np.fromfile(fileobj2,dtype=np.int32)
,只需执行off=fileobj2.read()
,然后打印字节。您应该看到类似于b'\x01\x00\x00\x00\x01\x00\x00'
;如果您看到的是b'\x01\x00\xc4\xac\x00'
,那么您知道是文件被破坏了,而不是记事本++。@abarnert实际上是一个打字错误(注意,我已经说过“我希望8个字节…”)。嗯,似乎记事本++确实坏了,这很奇怪,以前从未发生过:/,我可以问/把这个问题转换成“如何让记事本++与十六进制插件一起工作”吗?或者这太离题了?你不应该试着把一个问题转换成另一个问题。只要问一个新的。我认为新的一个可能会更多地讨论类似的主题,但是你应该阅读这两个站点(以及其他一些听起来相关的Stack Exchange站点)上的帮助,然后自己决定。这可能与notepad++或插件的版本有关吗?提到几年前Npp插件中的一个空字符问题。首先,int32
需要4个字节,而不是2个字节。接下来,除了Notepad++,您是否尝试过在任何其他程序中读取该文件?你可以很容易地在Python中完成它;不要使用off=np.fromfile(fileobj2,dtype=np.int32)
,只需执行off=fileobj2.read()
,然后打印字节。您应该看到类似于b'\x01\x00\x00\x00\x01\x00\x00'
;如果您看到的是b'\x01\x00\xc4\xac\x00'
,那么您知道是文件被破坏了,而不是记事本++。@abarnert实际上是一个打字错误(注意,我已经说过“我希望8个字节…”)。嗯,似乎记事本++确实坏了,这很奇怪,以前从未发生过:/,我可以问/把这个问题转换成“如何让记事本++与十六进制插件一起工作”吗?或者这太离题了?你不应该试着把一个问题转换成另一个问题。只要问一个新的。我认为新的一个可能会更多地讨论类似的主题,但是你应该阅读这两个站点(以及其他一些听起来相关的Stack Exchange站点)上的帮助,然后自己决定。这可能与notepad++或插件的版本有关吗?提到几年前Npp插件中的一个空字符问题。首先,int32
需要4个字节,而不是2个字节。接下来,除了Notepad++,您是否尝试过在任何其他程序中读取该文件?你可以很容易地在Python中完成它;不要使用off=np.fromfile(fileobj2,dtype=np.int32)
,只需执行off=fileobj2.read()
,然后打印字节。您应该看到类似于b'\x01\x00\x00\x00\x01\x00\x00'
;如果您看到的是b'\x01\x00\xc4\xac\x00'
,那么您知道是文件被破坏了,而不是记事本++。@abarnert实际上是一个打字错误(注意,我已经说过“我希望8个字节…”)。嗯,似乎记事本++确实坏了,这很奇怪,以前从未发生过:/,我可以问/把这个问题转换成“如何让记事本++与十六进制插件一起工作”吗?或者这太离题了?你不应该试着把一个问题转换成另一个问题。只要问一个新的。我认为新的一个可能会更多地讨论类似的主题,但是你应该阅读这两个站点(以及其他一些听起来相关的Stack Exchange站点)上的帮助,然后自己决定。这可能与notepad++或插件的版本有关吗?提到几年前Npp插件中的一个空字符问题。首先,int32
需要4个字节,而不是2个字节。接下来,除了Notepad++,您是否尝试过在任何其他程序中读取该文件?你可以很容易地在Python中完成它;不要使用off=np.fromfile(fileobj2,dtype=np.int32)
,只需执行off=fileobj2.read()
,然后打印字节。您应该看到类似于b'\x01\x00\x00\x00\x01\x00\x00'
;如果您看到的是b'\x01\x00\xc4\xac\x00'
,那么您知道是文件被破坏了,而不是记事本++。@abarnert实际上是一个打字错误(注意,我已经说过“我希望8个字节…”)。嗯,似乎记事本++确实坏了,这很奇怪,以前从未发生过:/,我可以问/把这个问题转换成“如何让记事本++与十六进制插件一起工作”吗?或者这太离题了?你不应该试着把一个问题转换成另一个问题。只要问一个新的。我认为新的一个可能会更多地讨论类似的主题,但是你应该阅读这两个站点(以及其他一些听起来相关的Stack Exchange站点)上的帮助,然后自己决定。这可能与notepad++或插件的版本有关吗?提到几年前Npp插件中的一个空字符问题。但他的问题是为什么他会得到5字节0100c4ac00
instea
import numpy as np
filename = "test.dat"
print(filename)
fileobj = open(filename, mode='wb')
off = np.array([1, 300], dtype=np.int32)
off.tofile(fileobj)
fileobj.close()
fileobj2 = open(filename, mode='rb')
off = np.fromfile(fileobj2, dtype = np.int32)
print(off)
fileobj2.close()
01 00 C4 AC 00
In [478]: np.array([1,300],np.int32).tofile('test')
In [479]: with open('test','rb') as f: print(f.read())
b'\x01\x00\x00\x00,\x01\x00\x00'
In [505]: np.array([1,300]).tostring()
Out[505]: b'\x01\x00\x00\x00,\x01\x00\x00'
[255]
b'\xff\x00\x00\x00'
[256]
b'\x00\x01\x00\x00'
[300]
b',\x01\x00\x00'
[1,255]
b'\x01\x00\x00\x00\xff\x00\x00\x00'
In [513]: np.frombuffer(np.array([1,300]).tostring(),int)
Out[513]: array([ 1, 300])
In [514]: np.frombuffer(np.array([1,300]).data,int)
Out[514]: array([ 1, 300])