У меня есть несколько строк из 256 символов шестнадцатеричных символов, представляющих последовательность битовых флагов, и я пытаюсь преобразовать их обратно в цепочку битов, чтобы я мог манипулировать ими с помощью &
, |
, vec
и тому подобное. Шестнадцатеричные строки записываются в целочисленные группы с широким целым числом, так что группа из 8 байтов, такая как "76543210"
, должна преобразовываться в цепочку битов "\x10\x32\x54\x76"
, то есть младшие 8 битов 00001000
.
Проблема в том, что формат pack
"h
" работает с одним байтом ввода за раз, а не с 8, поэтому результаты от его непосредственного использования не будут в правильном порядке. На данный момент я делаю это:
my $bits = pack("h*", join("", map { scalar reverse $_ } unpack("(A8)*", $hex)));
, который работает, но чувствует себя хакером. Кажется, что должен быть более чистый путь, но моя pack
-фу не очень сильная. Есть ли лучший способ сделать этот перевод?