朱莉娅将UInt32转换为UInt8矢量

时间:2018-09-28 22:54:49

标签: julia

我有以下代码,我需要将多个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

谢谢

2 个答案:

答案 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