Как прочитать 5-байтовый объект в word64 с помощью двоичного файла?

Можно ли прочитать 5-байтовый сегмент данных в Word64 с помощью пакета binary, оставив три старших бита пустыми? Или я должен использовать ByteString?

Почему голос против?

xuq01 26.10.2018 05:56

Вопрос абсолютно ок, закрывать не надо.

arrowd 26.10.2018 10:49

Для меня вопрос довольно непонятный. Если пять байтов не являются ограничением, то как вы хотите использовать двоичный пакет? Какие закуски высшего порядка должны оставаться пустыми? 61 62 63 или 37 38 и 39?

Thomas M. DuBuisson 26.10.2018 16:26

Кроме того, что помешало вам это сделать? Обычно за вопросы без попытки голосование ставится закрытым по таким причинам, как «слишком общие».

Thomas M. DuBuisson 26.10.2018 16:27

@ ThomasM.DuBuisson Я могу использовать и жить с байтовой строкой, но мне просто интересно, могу ли я сделать битовую упаковку в стиле C с помощью binary.

xuq01 26.10.2018 19:11

Ах, так как @bergey сказал, что мы можем использовать Data.Bits или просто старое умножение, такое как toWord64 = foldl (\a c - >a*256 + fromIntegral c) 0 :: [Word8] -> Word64, и битовые маски могут применяться по желанию, чтобы гарантировать, что правильные биты равны нулю. Если вы хотите использовать двоичный файл, то подразумевается использование строки байтов, например, decode . (pack [0,0,0] <>) :: ByteString -> Word64.

Thomas M. DuBuisson 26.10.2018 20:47

@ ThomasM.DuBuisson Понятно. Поэтому мне нужно пройти через ByteString абсолютно, и в моем случае я бы просто использовал сам ByteString. Тогда ответ на вопрос мой - нет. Спасибо!

xuq01 26.10.2018 21:40
1
7
111
1

Ответы 1

Сдвиг и побитовое ИЛИ находятся в Data.Bits. Data.Binary.Get имеет семейство getWord функции, которое считывает фрагменты фиксированной длины из ByteString неизвестной длины без какой-либо интерпретации, кроме порядка байтов. Также может быть полезно знать, что fromIntegral для типов Word сохраняет интерпретацию слова без знака-int (при переходе от меньших слов к большим), поэтому вы можете расширить с нуля Word8 до Word64.

Другие вопросы по теме