问题标签 [bit-packing]

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 投票
1 回答
5205 浏览

java - 将两条 short 打包成一个 int,处理负数和正数

我正在创建一个类 PackedUnsigned1616,它将两个未签名的短裤存储在一个 int 中,以及一个类 PackedSigned1616,它将两个签名的短裤存储在一个 int 中。我已经阅读了按位运算,但我仍然对如何处理有符号和无符号以及大于或小于短范围的值感到困惑(它们作为两个整数传入)。这是我到目前为止所得到的:

}

这整个概念让我很困惑,所以如果你能对此有所了解,那将有很大帮助。

0 投票
7 回答
30274 浏览

java - 使用按位运算符将多个值打包到一个 int 中

低级位操作从来都不是我的强项。对于理解以下按位运算符的用例,我将不胜感激。考虑...

我不确定这段代码正在完成什么以及如何完成?为什么使用幻数 0x7F ?装箱和拆箱是如何完成的?

来源

0 投票
1 回答
158 浏览

c - 位打包和动态分配的问题

我对这段代码有问题。

我正在构建一个图像编码器。基本上,我使用图像中的值构建了一个编码数组。该数组称为“代码”,并存储二进制值的 char* 表示形式。

这部分读取每个像素的灰度值,在“codes”数组中查找其值,并打包一个字节的二进制值(tempString)。读取 8 个值后,将 tempString 添加到已编码的无符号字节数组(encodedString)的末尾。

程序运行到 numBytes 大约为 27000 字节,然后出现段错误。

我知道这是一个长镜头,但我希望这是我如何分配内存的一个明显问题。

0 投票
8 回答
26701 浏览

c++ - 如何从 8 个布尔值中创建一个字节(反之亦然)?

我有 8bool个变量,我想将它们“合并”成一个字节。

有没有简单/首选的方法来做到这一点?

反过来,将一个字节解码为 8 个独立的布尔值怎么样?

我进来假设这不是一个不合理的问题,但由于我无法通过 Google 找到相关文档,这可能是另一种“你的直觉都是错误的”案例。

0 投票
3 回答
273 浏览

c - 将 4 字节数组中的最低有效位重新分配到半字节

我希望将 32 位值的 0、8、16、24 位分别移动到 0、1、2、3 位。输入和输出中的所有其他位都将为零。

显然我可以这样做:

但是有更快(更少指令)的方法吗?

0 投票
2 回答
854 浏览

c - 反转位打包算法

我正在尝试反转一种算法,该算法将一堆未签名的短裤打包到内存中。我试图扭转它,我得到正确的数字 50% - 75% 的时间,所以我不确定我做错了什么。

这是将数字打包到内存中的算法:

这会连续调用几次,将返回的 bStart 传递给下一次调用,直到所有数字都被打包到内存中。

这是我试图扭转它:

我知道我在做正确的事情,因为我得到了一堆正确的数据,尽管根据我写入内存的数字,从每四个到每一个读入的数字都是错误的。

有什么想法我在这里做错了吗?

0 投票
2 回答
1293 浏览

c - 如何使用 char 数组将位字段打包成短整数?

在以下 2 个结构中,

struct b中,我发现 b2 的位与 b1 打包在一起,而 b3 的位与 b2 打包。它最终产生 4 个字节的值。

我期待有类似的行为,struct a但我没有看到相同的行为。前 2 个字节被 a1(未使用的 5 位)占用,随后的 4 个字节用于 a2。

这种行为是预期的吗?为什么我不能将 char[4] 与 short:13 一起打包?有没有办法实现它?

0 投票
1 回答
77 浏览

java - 在 Java 中将位打包到 longs 服务器/客户端事务中

是否有库可以将位压缩为长整数?我正在尝试压缩通过网络发送的位。将这些位放入 png 文件并传输它会更有意义吗?

0 投票
3 回答
156 浏览

python - Python 破坏写入磁盘的 struct.pack 字符串

我正在开发一个将二进制数据(整数、双精度、原始字节)写入文件的应用程序。

问题是,数据实际上并没有按照我期望的方式写入文件:

所以一切看起来都很好。但经过仔细检查,该123.bin文件具有以下内容:

所以看起来字节被交换了io.write()

python文档说,io.write()接受“给定字节或字节数组对象”,问题是,它struct.pack确实返回一个str

那么,我做错了什么?如何在没有任何字符集翻译的情况下转换str为?bytes

0 投票
2 回答
1629 浏览

c# - 使用反射来确定 .Net 类型在内存中的布局方式

我正在尝试在 C# 中优化解析器组合器。当序列化格式与内存格式匹配时,一种可能的优化是对要在一个实例或什至该类型的许多实例上解析的数据进行(不安全)memcpy。

我想编写代码来确定内存格式是否与序列化格式匹配,以便动态确定是否可以应用优化。(显然这是一个不安全的优化,并且可能由于很多微妙的原因而不起作用。我只是在试验,不打算在生产代码中使用它。)

我使用属性[StructLayout(LayoutKind.Sequential, Pack = 1)]来强制不填充并强制内存中的顺序与声明顺序相匹配。我用反射检查该属性,但实际上所有这一切都证实了“没有填充”。我还需要字段的顺序。(我强烈希望不必为每个字段手动指定FieldOffset属性,因为这很容易出错。)

我假设我可以使用GetFields返回的字段顺序,但文档明确指出该顺序未指定。

鉴于我强制使用 StructLayout 属性对字段进行排序,有没有办法反映该排序?

编辑我对所有字段都必须是blittable的限制很好。