如何以小字节顺序逐位读取字节

时间:2018-03-14 09:40:52

标签: binary elixir

我试图逐位读取一个字节,但我发现要反转的位的顺序。我被告知我,我可能读错了(有大的结尾),当我应该阅读使用小的结尾。

序列为1101 0110

如果我只是将每个位模式匹配,我会得到所提到的顺序,但所需的顺序是0110 1101

我尝试将模式匹配添加到little-size(1),如此

<<
  test1::little-size(1),
  test2::little-size(1),
  test3::little-size(1),
  test4::little-size(1),
  test5::little-size(1),
  test6::little-size(1),
  test7::little-size(1),
  test8::little-size(1),
>> = byte

但我仍然得到相同的位顺序,我是否需要制作一个反转它们的函数?或者它被刻入Elixir,我只是做错了?

1 个答案:

答案 0 :(得分:3)

回答评论中的实际问题:

  

我想切换每个字节的两个半字节。

iex(1)> binary = <<0b11010110, 0b11010110>>
<<214, 214>>
iex(2)> for << <<a::4, b::4>> <- binary >>, into: <<>>, do: <<b::4, a::4>>
"mm"
iex(3)> <<0b01101101, 0b01101101>>
"mm"

我们在这里使用二进制理解来一次提取二进制的两个半字节,然后我们切换它们的顺序并将其插入一个新的二进制文件。