问题标签 [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# - 使用 C# 管理位压缩数据
我正在开发一个基于 TCP 的应用程序来处理 bitpacked 消息,这意味着:发送/接收的消息不是字节对齐的。例如,3 位代表字段 1,其中 19 位可能代表字段 2。我的问题是,有没有人知道 C# 库可以获取一组字节并设置/获取这些字节内的任意位范围?我已经在 C/C++ 中看到并创建了类似的实用程序,但我需要 100% C# 解决方案,我不想再次重新发明轮子。
我查看了 BitArray 类,但它不允许引用任意范围的位。
c - 有什么比这更好的将 4 个字节打包成 3 个字节的方法?
我有一个值数组,所有值都在 0 - 63 范围内,并决定我可以将每 4 个字节打包成 3 个,因为这些值只需要 6 位,我可以使用额外的 2 位来存储下一个值的前 2 位和很快。
switch
在我使用语句和nextbit
变量(类似设备的状态机)进行打包并跟踪起始位之前从未这样做过。但是我相信,一定有更好的方法。
请提供建议/线索,但不要破坏我的乐趣;-)
关于大/小端的任何可移植性问题?
顺便说一句:我已经通过再次解包并与输入进行比较来验证此代码是否有效。不,这不是家庭作业,只是我自己设定的一项练习。
c++ - C++ 数据成员对齐和数组打包
在代码审查期间,我遇到了一些定义简单结构的代码,如下所示:
在其他地方,定义了这些对象的数组:
稍后,这些结构被原始复制到缓冲区中:
此代码依赖于以下假设:a.) foo 的大小为 3,并且没有应用填充,并且 b.) 这些对象的数组被打包,它们之间没有填充。
我已经在两个平台(RedHat 64b、Solaris 9)上使用 GNU 进行了尝试,并且在这两个平台上都可以使用。
上述假设是否有效?如果不是,在什么条件下(例如操作系统/编译器的更改)它们可能会失败?
c# - 客户端-服务器数据加密和协议设计
我正在编写一个客户端-服务器应用程序,用于计算机实验室并充当服务(不作为服务运行)。我有一个控制台应用程序使用控制台的 HWND 对象调用本机函数“ShowWindow”/SW_HIDE——这给了它我想要的东西。服务器/客户端正在工作,我已发送消息“Hello world!” 从客户端到服务器多次,我很高兴。(我将 UDP 用于套接字协议,因为 IT 部门想要一种无连接的方法。)
我的问题在于客户端-服务器之间通信的“协议”。
服务器背后的目标包括以下内容:
- 以编程方式授予我们 IT 部门出于安全考虑已阻止的某些功能的访问权限(例如“net.exe”)
- 允许访问我的程序以监控学生在计算机实验室中查看的内容。
我想包括的一些事情是来回发送的简单问题:
- “REQUSER”命令将返回用户名和全名(之前“net user”允许)
- “REQPROCS”命令将返回当前在当前用户的用户名下运行的进程列表。
我毫不怀疑我能够做到这一点。我目前最担心的是数据安全。在我的大学里,我们确实有一些“黑客”,他们可能知道如何嗅探数据包并能够将数据包重新发送到特定服务器,以进行恶意操作或获取有关敌人的信息或诸如此类的信息。
我的想法是为所有发送的数据提供加密方案,并在接收时对其进行解码。
一位与我交谈过的朋友说我应该使用 bit packer,我开始将他的 BitPacker 类从 C++ 移植到 C#,我对此感到困惑并来到这里看看 Stackoverflow 的想法。
PS我希望问题很清楚?我注意到我写的大部分问题都不清楚。:/
c# - C# 相当于 python 的 struct.pack
是否有 C# 库允许与标准库中的 python 类似struct
的功能?
人们可以用真正的对齐结构非常接近地模拟结构库。但是我还没有找到任何方法来直接控制 C# 结构中的字节顺序(C# 的结构似乎更倾向于 COM 互操作,而不是通用二进制打包)。
c++ - 整数数组的位打包
我有一个整数数组,假设它们的类型是int64_t
. 现在,我知道只有每个n
整数的每个第一位都是有意义的(也就是说,我知道它们受到某些界限的限制)。
以删除所有不必要的空间的方式转换数组的最有效方法是什么(即我有第一个整数a[0]
,第二个整数a[0] + n bits
等等)?
我希望它尽可能地通用,因为n
会不时变化,尽管我猜可能会有针对特定n
的 2 或某事物的智能优化。
当然我知道我可以迭代价值而不是价值,我只是想问你 StackOverflowers 是否能想到一些更聪明的方法。
编辑:
这个问题不是关于压缩数组以尽可能少地占用空间。我只需n bits
要从每个整数中“剪切”,并且给定数组,我知道我可以安全剪切的确切n
位。
c++ - 如何将结构的所需位打包在 char* 中?
语言:C++
我正在研究位打包(从给定数据中提取所需的位并将它们打包在 char* 中)。我的代码目前支持: - 整数 - 字符 - 字符串
现在,如果我必须存储结构所需的位,我应该怎么做?我的意思是我应该期望什么作为通用代码 wrt 结构的输入参数?
这个问题可能含糊不清,我并不期待直接的答案,即使是提示和指针也值得赞赏。
c++ - 打包位域时 VC++ 在做什么?
为了澄清我的问题,让我们从一个示例程序开始:
输出为“8”,表示我要打包的 56 位(7 个字节)被打包成 8 个字节,貌似浪费了一个字节。好奇编译器如何将这些位放在内存中,我尝试将特定值写入&c
,例如:
int main(int argc, char **argv)
可以预见的是,在使用 Visual Studio 2010 的 x86_64 上,会发生以下情况:
等等
暂时忘记可移植性,假设您关心一个 CPU、一个编译器和一个运行时环境。为什么VC++不能把这个结构打包成7个字节?这是一个字长的事情吗?MSDN 文档上说“成员的#pragma pack
对齐方式将在 n [在我的情况下为 1] 的倍数或成员大小的倍数的边界上,以较小者为准。” 谁能告诉我为什么我的 sizeof 为 8 而不是 7?
c - 位压缩结构内的数组
我想在位压缩结构中有一个数组。我静态地知道数组的大小(32),我希望数组中的每个元素都是一个位。例如,我希望能够这样说:
我已经尝试了几件事,但 gcc 不会让步。能够这样做会很好,这样我就可以编写干净的代码来迭代打包数组中的元素。想法?
python - How to pack arbitrary bit sequence in Python?
I want to encode/compress some binary image data as a sequence if bits. (This sequence will, in general, have a length that does not fit neatly in a whole number of standard integer types.)
How can I do this without wasting space? (I realize that, unless the sequence of bits has a "nice" length, there will always have to be a small amount [< 1 byte] of leftover space at the very end.)
FWIW, I estimate that, at most, 3 bits will be needed per symbol that I want to encode. Does Python have any built-in tools for this kind of work?