我有以下代码,我需要将多个UInt32变量隐含到UInt8向量中,然后将它们组合成一个UInt8向量。
目标是获取我从Pcap文件中解码的记录,并将其放入可以附加到现有Pcap文件末尾的格式。
下面的代码从上一个函数获取输出,并返回4个UInt 32的十六进制输出和有效负载的UInt8的向量。
function pcap_get_record(s::PcapOffline)
rec = PcapRec()
if (!eof(s.file))
rec.ts_sec = s.is_big ? read(s.file, UInt32) : ntoh(read(s.file, UInt32))
rec.ts_usec = s.is_big ? read(s.file, UInt32) : ntoh(read(s.file, UInt32))
rec.incl_len = s.is_big ? read(s.file, UInt32) : ntoh(read(s.file, UInt32))
rec.orig_len = s.is_big ? read(s.file, UInt32) : ntoh(read(s.file, UInt32))
rec.payload = read(s.file, rec.incl_len)
return rec
end
nothing
end
谢谢
答案 0 :(得分:4)
您在这里
julia> reinterpret(UInt8, rand(UInt32, 1)) |> Vector
4-element Array{UInt8,1}:
0x4d
0x54
0x34
0xd3
记住要检查字节顺序。
答案 1 :(得分:0)
更新:所以我已经解决了这个问题,并且我在考虑需要做的事情。
我只是以原始格式编写了UInt变量,就成功了。
write(pcap, rec.orig_len) #this is a UInt32
write(pcap, rec.payload) #this is a UInt8 vector
原件: 我很难让以前的评论可读。
感谢您的回复。但是,我无法使重新解释与UInt32变量一起使用。
a = reinterpret(UInt8, rec.ts_usec) |> Vector
ERROR: bitcast: argument size does not match size of target type
Stacktrace:
[1] reinterpret(::Type{UInt8}, ::UInt32) at .\essentials.jl:370
[2] top-level scope at none:0
typeof(rec.ts_usec)
UInt32
在弄乱了一些东西之后,我能够使它工作,但这似乎不是很有效。
“编辑”我刚刚发现这将行不通,因为它切断了UInt32中的所有前导零。示例rec.incl_len = 0x00000516将显示为“ 516”,而不是所需的“ 00000516”。
julia> hex(n) = string(n, base = 16, pad = 2)
julia> a = hex2bytes(hex(rec.ts_sec))
4-element Array{UInt8,1}:
0x5b
0x60
0xa3
0xa1