在Julia中以特定格式解包二进制数据

在Julia中以特定格式解包二进制数据,julia,binaryfiles,binary-data,Julia,Binaryfiles,Binary Data,我正在尝试将二进制文件解析器从Python转换为Julia。我正在努力找出如何以特定格式解压二进制流。我发现对话线程正是我想要做的,但它是从2017年开始的,似乎没有一个有效的解决方案。有人有解决办法吗 在Python中,它如下所示: julia> data = IOBuffer("\x00\x00\x00\x17@\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00*") IOBuffer(data=UInt8[...], readable=true

我正在尝试将二进制文件解析器从Python转换为Julia。我正在努力找出如何以特定格式解压二进制流。我发现对话线程正是我想要做的,但它是从2017年开始的,似乎没有一个有效的解决方案。有人有解决办法吗

在Python中,它如下所示:

julia> data = IOBuffer("\x00\x00\x00\x17@\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00*")
IOBuffer(data=UInt8[...], readable=true, writable=false, seekable=true, append=false, size=16, maxsize=Inf, ptr=1, mark=-1)

julia> seekstart(data)
IOBuffer(data=UInt8[...], readable=true, writable=false, seekable=true, append=false, size=16, maxsize=Inf, ptr=1, mark=-1)

julia> i  = bswap(read(data, Int32))
23

julia> pi = bswap(read(data, Float64))
3.14

julia> i  = bswap(read(data, Int32))
42
[22]中的
struct.unpack('>idi',b'\x00\x00\x00\x17@\t\x1e\xb8Q\xeb\x85\x1f\x00\x00*)
Out[22]:(23,3.14,42)
在朱莉娅,我在这里:

data = open(filename, "r")
seek(data, 0)
# now I want to get the first 12 bytes of the file and convert to a string.. and am stumped.. 

我不太熟悉Python中的
struct.unpack
,但也许您可以这样做:

julia> data = IOBuffer("\x00\x00\x00\x17@\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00*")
IOBuffer(data=UInt8[...], readable=true, writable=false, seekable=true, append=false, size=16, maxsize=Inf, ptr=1, mark=-1)

julia> seekstart(data)
IOBuffer(data=UInt8[...], readable=true, writable=false, seekable=true, append=false, size=16, maxsize=Inf, ptr=1, mark=-1)

julia> i  = bswap(read(data, Int32))
23

julia> pi = bswap(read(data, Float64))
3.14

julia> i  = bswap(read(data, Int32))
42
bswap
s之所以存在,是因为Julia内部使用的内容和二进制流中编码的内容之间的endianness似乎存在差异。除此之外,这只是简单地使用
read
,指定要读取的数据类型

顺便说一句,下面是如何读取文件的前12个字节,并将其转换为字符串(在本例中,这不是必需的,但在其他情况下可能有用):


谢谢是的,我刚想出来。。这是我第一次尝试使用二进制解析器,只是花了一点时间,它才渗透到我的脑海中。我最近没有尝试过,但可能值得一看