【发布时间】:2017-02-23 21:01:43
【问题描述】:
我正在尝试通过 LPWAN 发送消息,而我面临的问题之一是试图让我的消息尽可能短。
例如:
我有两个整数 (0-100) 和两个布尔值,我必须将它们转换为十六进制才能通过 LPWAN 发送。示例:
- 24
- 63
- 是的
- 错误
当我将其连接为 246310 (Hex:3C226) 时,这将占用 3 个字节。但是,我知道我的第一个整数永远不会高于 50,也就是 6 位。我可以让十六进制消息比 3C226 短吗?
【问题讨论】:
-
@LPs 它们总是2个整数和2个布尔值,第一个整数总是0到50,第二个整数总是0到100
-
在您的评论中,您指定第二个整数在 [0, 100] 范围内,但在您的问题中它是 [0, 80]。如果它实际上是 [0, 100],请编辑您的问题。
-
此外,除非这些变量之间存在任何依赖关系,否则您将始终需要至少
ceil(log(51 * 101 * 2 * 2) / log(2)) = 15位来发送这些消息。在这种情况下,unwind 的答案尽可能高效,而且使用起来也很容易。 -
完成了,尽管它对问题没有任何影响,因为 100 和 80 一样是 7 位
-
它几乎有所作为。如果你有 [0, 50], [0, 79], [0, 1], [0, 1] 的范围,如果你使用另一种技术,你只需要至少 14 位。
标签: c bit-manipulation concatenation bitwise-operators