Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Binary 如何以较小的尾数逐位读取一个字节_Binary_Elixir - Fatal编程技术网

Binary 如何以较小的尾数逐位读取一个字节

Binary 如何以较小的尾数逐位读取一个字节,binary,elixir,Binary,Elixir,我试图一点一点地读取一个字节,但我发现位的顺序是颠倒的。有人向我建议,当我应该用小字头阅读时,我可能读错了(用大字头) 序列是11010110 如果我简单地对每个位进行模式匹配,我会得到上面提到的顺序,但所需的顺序是011101 我试着用little size(1)添加模式匹配,就像这样 << test1::little-size(1), test2::little-size(1), test3::little-size(1), test4::little-size(

我试图一点一点地读取一个字节,但我发现位的顺序是颠倒的。有人向我建议,当我应该用小字头阅读时,我可能读错了(用大字头)

序列是
11010110

如果我简单地对每个位进行模式匹配,我会得到上面提到的顺序,但所需的顺序是
011101

我试着用
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
>=字节

但是我仍然得到相同的位顺序,我需要做一个函数来反转它们吗?还是它被烤成了长生不老药,而我只是做错了?

回答评论中的实际问题:

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

iex(1)>二进制=
iex(2)>对于,进入:,执行:
“嗯”
iex(3)>
“嗯”

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

回答评论中的实际问题:

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

iex(1)>二进制=
iex(2)>对于,进入:,执行:
“嗯”
iex(3)>
“嗯”

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

那么您想每4位反转一次吗?或者在所需的顺序中是否有输入错误?Endianness是指大二进制中完整字节的顺序,而不是字节中的位(或4位)。嘿@Dogbert,我想切换每个字节的两个半字节。这可能会让人明白“这些组中的每一个都是简单地颠倒过来的。这是因为人类可读的表示是big-endian,当您读取索引0处的位时,它是最右边的。因此,如果您从流中一点一点地读取它们,则从右到左读取每个字节。”Endianess是字节级别的。二进制字节01101101在序列76543210中具有2的幂。所以已经出现了逆转。通常先发送位[0]:“little endian”。对于交换半字节,顺序是不相关的。所以你想每4位反转一次吗?或者在所需的顺序中是否有输入错误?Endianness是指大二进制中完整字节的顺序,而不是字节中的位(或4位)。嘿@Dogbert,我想切换每个字节的两个半字节。这可能会让人明白“这些组中的每一个都是简单地颠倒过来的。这是因为人类可读的表示是big-endian,当您读取索引0处的位时,它是最右边的。因此,如果您从流中一点一点地读取它们,则从右到左读取每个字节。”Endianess是字节级别的。二进制字节01101101在序列76543210中具有2的幂。所以已经出现了逆转。通常先发送位[0]:“little endian”。对于交换字节,顺序是不相关的。
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"