【发布时间】:2018-03-14 17:55:47
【问题描述】:
我正在尝试逐位读取一个字节,但我发现位的顺序要颠倒。有人建议我,当我应该使用小字节序阅读时,我可能读错了(大字节序)。
序列是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 中,而我只是做错了?
【问题讨论】:
-
所以你想每 4 位反转一次?还是在所需的顺序中有错字?字节序是指大型二进制文件中完整字节的顺序,而不是字节内的位(或 4 位)。
-
嘿@Dogbert,我想切换每个字节的两个半字节。这可能会对此有所了解stackoverflow.com/questions/49254886/…“这些组中的每一个都只是简单地颠倒了。那是因为人类可读的表示是大端的,当您读取索引 0 处的位时,这是最右边的。所以如果您正在阅读它们从流中逐位读取,从右到左读取每个字节。”
-
字节序是字节级别的。二进制字节 01101101 在序列 76543210 中具有 2 的幂。因此已经存在反转。通常 bit[0] 会首先发送:“little endian”。 对于交换半字节,顺序无关紧要。