问题标签 [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.
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
.
什么是解析这个的好方法?
binary - 将一个数字打包成奇数位
2 19 位长的头域。我正在尝试将数字 921 十进制转换为十六进制。最低有效字节优先。
打包成 24 位很容易:
921.0 = 0x0399
二进制:
9 9 0 3 0 0
1001 1001 0000 0011 0000 0000
并做了。结果:0x990300
我如何将它打包成 19 位?
c - 为什么打包不能跨兄弟联合或结构工作
在下面的示例中,我希望 的大小与 : 2 字节complex_t
相同uint16_t
,但它是 3 字节。
删除第二个联合(“proximity_unsafe”)将大小减少到 2 个字节,但我无法弄清楚打包规则的模型。
c++ - 如何在 CUDA 中(有效地)打包位?
我有一个字节数组,其中每个字节为 0 或 1。现在我想将这些值打包成位,以便 8 个原始字节占用 1 个目标字节,原始字节 0 进入位 0,字节 1 进入位 1,等到目前为止,我在内核中有以下内容:
这是正确和有效的吗?
javascript - 7位和16位的jquery短信字符计算器
我有一个文本字段可以用英文和中文输入短信。正如我所搜索的,1 条短信只能有 1120 位。每个英文字符是 7 位,因此它可以是 1120/7 = 160 个字符,对于中文,每个字符是 16 位,因此是 1120/16 = 70 个字符。我需要使用 jquery 来显示文本字段下的文字和剩余的文字。我该怎么做呢?
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 位值,然后我需要提取原始值并将它们发送到另一个单独的进程。
compression - LZ4 压缩是否消除了手动位打包的需要?
我正在考虑将 LZ4 压缩用于我正在开发的高带宽浏览器游戏。我目前正在将 1000 个 float32 值预压缩到 16 位。我想知道我是否预压缩到 12 位但将这些值保存为 uint16s,LZ4 是否会删除空位并为我节省手动位打包这些值的工作。
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 的建议措辞。
- 交叉发布在代码审查上。
c++ - 将多个整数打包成一个 64 位整数
我想按以下顺序将以下数字打包到 64 位 int64_t 字段中:
- int8_t num1
- int8_t num2
- int32_t num3
- int16_t num4
因此,64 位应采用以下布局:
我无法理解位打包逻辑,即我希望将这些数字打包到单个 int64_t 字段中,类似于这个问题。
任何帮助是极大的赞赏。
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 个到一个字节数组中?