Юлия конвертирует UInt32 в вектор UInt8 - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть следующий код, и мне нужно преобразовать несколько переменных 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 голосов
/ 02 октября 2018

Обновление: Итак, я решил это, и я задумался над тем, что нужно сделать.

Я просто написал переменную 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
0 голосов
/ 29 сентября 2018

Вот вам

julia> reinterpret(UInt8, rand(UInt32, 1)) |> Vector
4-element Array{UInt8,1}:
 0x4d
 0x54
 0x34
 0xd3

Не забудьте проверить порядок байтов.

...