问题标签 [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 回答
115 浏览

c - 将 MAC 地址解析为三个 16 位短路数组

MAC 地址为 48 位。这相当于三条短裤。MAC 地址有时会这样写:01:23:45:67:89:ab其中每对数字代表一个十六进制数。

编写一个函数,该函数将接收一个指向 null终止字符串的字符指针,如示例中所示,并将其拆分,然后将其存储在三个 16 位短的数组中。数组的地址也将传递给函数。

我认为函数头应该看起来像void convertMacToShort(char *macAddr, short *shorts);. 我遇到的困难是解析char*. 我觉得如果我循环它是可能的,但这感觉不够有效。我什至不需要让它成为某种通用函数——MAC 地址将始终char*01:23:45:67:89:ab.

什么是解析这个的好方法?

0 投票
1 回答
386 浏览

binary - 将一个数字打包成奇数位

2 19 位长的头域。我正在尝试将数字 921 十进制转换为十六进制。最低有效字节优先。

打包成 24 位很容易:

921.0 = 0x0399

二进制:

9 9 0 3 0 0

1001 1001 0000 0011 0000 0000

并做了。结果:0x990300

我如何将它打包成 19 位?

0 投票
1 回答
44 浏览

c - 为什么打包不能跨兄弟联合或结构工作

在下面的示例中,我希望 的大小与 : 2 字节complex_t相同uint16_t,但它是 3 字节。

删除第二个联合(“proximity_unsafe”)将大小减少到 2 个字节,但我无法弄清楚打包规则的模型。

0 投票
2 回答
1512 浏览

c++ - 如何在 CUDA 中(有效地)打包位?

我有一个字节数组,其中每个字节为 0 或 1。现在我想将这些值打包成位,以便 8 个原始字节占用 1 个目标字节,原始字节 0 进入位 0,字节 1 进入位 1,等到目前为止,我在内核中有以下内容:

这是正确和有效的吗?

0 投票
3 回答
1668 浏览

javascript - 7位和16位的jquery短信字符计算器

我有一个文本字段可以用英文和中文输入短信。正如我所搜索的,1 条短信只能有 1120 位。每个英文字符是 7 位,因此它可以是 1120/7 = 160 个字符,对于中文,每个字符是 16 位,因此是 1120/16 = 70 个字符。我需要使用 jquery 来显示文本字段下的文字和剩余的文字。我该怎么做呢?

0 投票
1 回答
340 浏览

c++ - 服用 OpenCV Mat并转换为 12 位值的数组。

我有一个 cv::Mat 的双打图像,我在 0.0 和 4095.0 之间截断。我希望能够转换这个矩阵/创建一个基于这个 12 位的新矩阵。(容纳 0 -> 4095 个整数值所需的最小 int 大小)。我可以取出原始缓冲区,但是我不确定矩阵内数据的格式。

手动我可以执行以下操作:

这实际上是将两个双精度值压缩为一个用于上半部分,一个用于下半部分,从中提取三个字节(12 + 12 = 24, 24/8 = 3)到一个 3 字节矩阵中。我不确定内存布局是否会与打包的 12 位匹配(我确实有偶数列,所以除以 cols/2 不是问题)而且我不确定如何确保这符合字节序.

我什至可以使用自定义数据类型,但如果说我制作了 Union Struct 12bit 类型或其他东西,我需要确保元素没有被填充。

注意转换后,我不再打算在 OpenCV 中使用 12 位值,然后我需要提取原始值并将它们发送到另一个单独的进程。

0 投票
0 回答
93 浏览

compression - LZ4 压缩是否消除了手动位打包的需要?

我正在考虑将 LZ4 压缩用于我正在开发的高带宽浏览器游戏。我目前正在将 1000 个 float32 值预压缩到 16 位。我想知道我是否预压缩到 12 位但将这些值保存为 uint16s,LZ4 是否会删除空位并为我节省手动位打包这些值的工作。

0 投票
5 回答
1439 浏览

c - 使用 C 中的位打包压缩“char”数组

我有一个类型unsigned char(即)的大型数组(大约 1 MB uint8_t)。我知道其中的字节只能有 5 个值之一(即 0、1、2、3、4)。此外,我们不需要从输入中保留“3”,当我们编码/解码时,它们可以安全地丢失。

所以我猜测位打包将是最简单的压缩方法,因此每个字节都可以转换为 2 位(00, 01..., 11)。

如前所述,可以删除所有值为 3 的元素(即保存为 0)。这让我可以选择将“4”保存为“3”。在重建(解压缩)时,我将 3 恢复为 4。

我为压缩编写了一个小函数,但我觉得它的操作太多,效率不够。任何关于如何使其更高效或更快(希望保持可读性)的代码片段或建议都会非常有帮助。

  • 编辑以使问题更清楚,因为看起来我正在尝试将 5 个值保存到 2 位中。感谢@Brian Cain 的建议措辞。
  • 交叉发布在代码审查上。
0 投票
1 回答
1060 浏览

c++ - 将多个整数打包成一个 64 位整数

我想按以下顺序将以下数字打包到 64 位 int64_t 字段中:

  • int8_t num1
  • int8_t num2
  • int32_t num3
  • int16_t num4

因此,64 位应采用以下布局:

我无法理解位打包逻辑,即我希望将这些数字打包到单个 int64_t 字段中,类似于这个问题

任何帮助是极大的赞赏。

0 投票
2 回答
1433 浏览

python - 如何在 python3 中有效地将位从一个字节数组打包到另一个?

我在 python 中有一个相当大的字节数组。在最简单的情况下,字节数组只包含 0 或 1 个值(0x00、0x01),而且数组的长度始终是 8 的倍数。如何将这些“位”打包到另一个字节数组中(它不需要是可变的),以便源索引零进入第一个输出字节的 MSB 等。

例如,如果src = bytearray([1,0,0,0,1,0,0,1, 1,1,1,0,0,0,1,0, 1,1,1,1,1,1,1,1]) 期望的输出是b'\x89\xe2\xff'.

我可以使用 for 循环和位移位以及 or-ing 和连接来做到这一点,但肯定有更快/更好的内置方法来做到这一点。

在后续问题中,我还可能希望源字节数组包含集合 0-3 中的值,并将这 4 个一次打包到输出数组中。有没有办法做到这一点?

一般来说,有没有办法将列表的元素解释为真或假,并将它们一次打包 8 个到一个字节数组中?