问题标签 [bitstring]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
852 浏览

erlang - 如何检查是否在 Elixir/Erlang 中设置了特定位

例如<<1, 0, 110, 64>>,给定任何二进制文件,我们如何确定是否设置了特定位?

假设我们希望确定是否设置了bit-1bit-2,人们希望这可以工作,但它没有:

给出:

正确答案来自 Igor 和其他评论):

<<_::bits-6, bit2::bits-1, bit1::bits-1, num::bits>> = <<1, 0, 110, 64>>

给出预期的答案:

{bit1,bit2} = {1, 0}

背景

我正在构建一个解析器来处理这个问题:https ://msdn.microsoft.com/en-us/library/vs/alm/dd943386(v=office.12).aspx

使用这个 C# 代码作为模板,我得到了正确的结果:<<1, 0, 110, 64>> = 2.4

https://github.com/ChiangHanLung/PIC_VDS/blob/f96afdd3863f5ce1df237b2784040624bc88b16b/Reference_DLL_SourceCode/NPOI/HSSF/Util/RKUtil.cs#L33-L74

我对上述的等效 Elixir 实现按预期工作,但我相信使用位串解析应该是可能的(并且更清洁)

0 投票
1 回答
111 浏览

python - 有效地重组二进制数据然后转置块

我有一个包含 32 个样本的原始二进制文件,每个样本是 256 位。每个样本的第 n 个元素组合创建一个有效样本,因此在本例中为 256 个有效样本。输入文件上的样本顺序不正确,必须重新排序。为此,我正在使用位串模块并读取 8192 位,然后将它们解压缩为正确的顺序。这看起来很合理。现在我必须将所有样本的第 n 位组合成一个新结构,以便每个样本都是 32 位。我在问如何有效地重新排序(完成)然后转置原始二进制数据。也许完全放弃位串模块会更好。

0 投票
1 回答
32 浏览

algorithm - 检查双空上的位串

我的任务是编写一个算法来获取位字符串长度(如果这是正确的翻译)并计算所有不包含双空值的位字符串。

例如:“10101”会计算在内,而“10010”不会计算在内。

我的问题是,我不知道位串的正确数据类型,有人可以帮忙吗?

0 投票
0 回答
228 浏览

python - 如何检查文件/块是否全为零

我编写了一些软件来读取专有文件系统的索引,然后将文件写入新位置(如果感兴趣,请参阅此处了解更多信息)。

自从成功使用该软件后,我注意到文件系统指向的某些块实际上不再包含任何数据,并且用零填充。到目前为止,我编写软件的方式导致零字节文件被写入文件系统默认块大小的长度(通常为 1GB)。

我想要一种有效的方法来检查一个块在写入文件之前是否完全用零填充。我的第一个想法是简单地使用 bitstring 的 find 函数查找 1 位,然后返回 True 表示该块有数据。

有没有更有效的方法?

0 投票
2 回答
270 浏览

python - 表示 UDP 包的 Pythonic 方式

我正在寻找一种 pythonic 方式来表示一个 UDP 包,该包由不同长度的不同字段组成,等等。

我看到了bitstring,但是定义所有字段及其长度的过程非常麻烦。我可能需要创建一个类并为每个字段和长度创建一个变量,并检查它们是否不会被更大的数字覆盖等等。

对我来说,这听起来像是图书馆的工作,但我找不到。

有谁知道适合这项任务的图书馆?

0 投票
1 回答
195 浏览

python - 位串相似度得分

我有一个 CSV 文件,其中包含 14000 行的问卷数据。问卷有 MCQ-Multiple Response(M10,M13)。对于 MCQ-MR,就像在 M13 中一样,有 8 个选项,如果受访者选择了某个选项,则表示为 1,否则表示为 0。我想为每个位串生成一个相似度分数,并将其替换为位串。分数应该以类似00010011和更相似的方式计算,因为受访者选择了相同的选项,除了第三和第四选择,因此与和00100011相比,得分必须更接近。0001001100000001

线程提供了一些关于比较两个字符串之间的 Levenshtein 距离的见解。但是对于 14000 行,这将是巨大的计算负担。有没有其他方法可以做到这一点?

0 投票
2 回答
282 浏览

binary - 如何翻转 Erlang 位串中的单个特定位?

我有以下模块:

Erlang REPL 会话(示例):

问题:

我无法弄清楚为什么该set_bit函数会引发异常。

在上面的示例中,当我调用 时set_bit(B, 0),我希望函数返回一个新的位串(例如NewB),其中第一位(在索引 0 处)已从 0 翻转到 1。

这样,如果我调用get_bits(NewB),它将返回:<<1,0,0>>

如何翻转 Erlang 位串中的单个特定位?

0 投票
1 回答
68 浏览

erlang - 如何将“标签”与 Erlang 位串中的每个位相关联?

假设我有以下位串:

其中包含五个位:<<0,0,0,0,0>>

为了设置这些位之一,我使用了这个辅助函数:

我这样调用函数:

这会给我这个位串:<<0,0,1,0,0>>

是否有可能以某种方式将“标签”与位串中的每个位相关联?

像这样的东西:<<A1=0,A2=0,A3=1,A4=0,A5=0, … >>

这样我就可以通过它的标签来引用每个位,而不是像上面的函数那样通过它的索引来引用。通过编写一个类似这样签名的函数:set(Bits, BitLabel).

可以这样称呼:set(Grid, "A3")

在我的应用程序中,我使用 81 位的固定大小位串作为 9*9“网格”(行和列)。能够通过其行/列标识符(例如A3)引用每个“单元格”将非常有用。

0 投票
2 回答
239 浏览

c - 如何在C中表示长序列?

我正在尝试将一串十六进制转换为一个长序列。这是 Cryptopals 挑战中挑战 1 的一部分(将十六进制转换为 base64)。

我的想法是将字符串中的每两个字符转换为其数值的一个字符(同时将第一个乘以 16),因为 |hex| = 4,|字符|=8。

然后,每次屏蔽前 6 位,并将它们转换为 base64。

问题是,在前 6 位之后,我需要将所有数组左移 6 次 - 显然 - 我不知道该怎么做。

那么,作为开始,它们是否有更好的方法将十六进制字符串表示为位序列?

而且 - 我怎样才能将所有数组左移?我在这里看到了处理移动每个元素并复制它们的解决方案——这是最简单的方法吗?

这是我到目前为止所做的 - 我添加了一些额外的步骤来澄清:

0 投票
1 回答
112 浏览

binary - 为什么 Elixir 位串的最后一位默认为 1?

创建一个 3 位的位串:

使用位串理解来显示每个位的值:

输出:

请注意,最后一位是 1,而不是 0。

为什么默认情况下所有位都不为0,并且可以以某种方式实现吗?