c++ - 向字符串添加位值
问题描述
我正在尝试通过网络发送数据包,因此希望它尽可能小(就大小而言)。
每个输入都可以包含一个公共前缀子字符串,例如ABCD
. 在这种情况下,我只想发送一个位,1
表示当前字符串具有相同的前缀ABCD
并将其附加到剩余的字符串。所以,如果字符串是ABCDEF
,我会发送1EF
; 如果是LKMPS
,我希望按LKMPS
原样发送字符串。
有人可以指出我如何在字符串中添加一点吗?
编辑:我知道1
在字符串中添加 a 并不意味着这1
有点 - 它只是我添加到字符串中的一个字符。这正是我的问题——对于每个字符串,我如何发送一点表示前缀匹配?然后发送的字符串的其余部分是不同的?
解决方案
在常见的网络硬件中,您将无法发送单个位。而且大多数架构也无法解决单个位。
但是,您仍然可以通过使用您可能不使用的位之一来最小化所需的大小。例如,如果您的字符串仅包含 7 位 ASCII 字符,您可以使用最高位在字符串的第一个字节中编码您想要的信息。
例如,如果第一个字节是:
0b01000001 == 0x41 == 'A'
然后使用设置最高位|
:
(0b01000001 | 0x80) == 0b11000001 == 0xC1
要测试该位,请使用&
:
(0b01000001 & 0x80) == 0
(0b11000001 & 0x80) != 0
要删除该位(在已设置的情况下)以取回原始第一个字节:
(0b11000001 & 0x7F) == 0b01000001 == 0x41 == 'A'
推荐阅读
- excel - 如何通过单击 excel 表中的按钮使用从 excel 到 word 的 mailmerge 宏
- javascript - 循环嵌套对象以使用 ES6 计算值
- tensorflow - 张量流张量函数
- jquery - 使用jquery重置滚动动画效果
- wordpress - 如何在 Wordpress 中获取用户的订单?
- forms - 从外部销售代理处获取数据的平台/外联网建议
- android - 自动化 Android 中的行为:打开外部应用程序,截屏并返回其他应用程序
- javascript - React-scripts:无法从 dist 文件夹导入模块
- javascript - Dexie.js:导出和导入数据库给出 webpack 错误。导出不是函数
- c# - 我的加入 .NetCore 3.1 抛出关于 NavigationExpandingExpressionVisitor 的异常,那是什么?