У меня есть массив байтов, например:Предварение размер массива байтов в массив байтов
(def g (byte-array (map byte [0 1 2 3])))
Как получить размер его и как предварять этот размер в массиве г байт ?
У меня есть массив байтов, например:Предварение размер массива байтов в массив байтов
(def g (byte-array (map byte [0 1 2 3])))
Как получить размер его и как предварять этот размер в массиве г байт ?
В Предварение часть может быть сделано, как это (вероятно, не самое лучшее решение):
(def g (byte-array (apply #(cons (byte (count %)) %) [(map byte [0 1 2 3])])))
возвращает:
[4, 0, 1, 2, 3]
Я думаю, что вы должны использовать (alength g)
для длины массива Java.
Конечно, если ваш массив байтов длиннее 255, у вас возникнут проблемы с добавлением длины в виде одного байта.
Не уверен, что вы имеете в виду о предваряя размер, но вы можете получить размер с помощью count
user=> (def g (byte-array (map byte [0 1 2 3])))
#'user/g
user=> (count g)
4
Спасибо, я хочу добавить размер в начало массива. Для буферов протокола Google. – user1676605
alength
доставит вам размер.
Вам нужно будет создать новый массив, чтобы добавить его. Вот так:
(def g' (let [len (alength g)
bs (byte-array (inc len))]
(do (System/arraycopy g (int 0) bs (int 1) len)
(aset bs (int 0) len)
bs)))
Может быть '(byte-array (cons (-> g count byte) g))'? Или '(- >> (cons (count g) g) (байтовый байт) byte-array)', если вам нужно все бросить? – Beyamor
Может быть так: '(def g (- >> [0 1 2 3] (# (cons (count%)%)) (байт карты) (byte-array)))' – jdb