首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有效级联

有效级联
EN

Stack Overflow用户
提问于 2016-10-14 12:19:16
回答 2查看 59关注 0票数 2

我正试图通过LPWAN发出一个信息,而我所面临的问题之一就是尽量缩短我的信息。

例如:

我有两个整数(0-100)和两个布尔( Booleans ),我必须将它们转换为十六进制来发送LPWAN。示例:

  • 24
  • 63
  • 真的
  • 错误

当我将其连接为246310 (十六进制:3C226)时,这将花费3个字节。但是,我知道我的第一个整数永远不会大于50,也就是6位。我是否可以让十六进制信息短于3C226?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-14 12:27:04

是的,那应该是可能的。

字段的位数是:

  • integer0:整数0..50,6位。
  • integer1:整数0.80,7位。
  • flag0:布尔值,1位。
  • flag1:布尔值,1位。

总共是6+7+1+1= 15位。

以下是如何编码:

代码语言:javascript
复制
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|  |                 |                    |  |  |
|  |  integer0       |  integer1          |f0|f1|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

uint16_t encode(uint8_t integer0, uint8_t integer1, bool flag0, bool flag1)
{
  return ((uint16_t) integer0 << 9) | ((uint16_t) integer1 << 2) | ((uint16_t) flag0 << 1) | flag1;
}
票数 3
EN

Stack Overflow用户

发布于 2016-10-14 12:29:28

使用2个字节,可以将该值存储为:

代码语言:javascript
复制
   FirstNum         Second        1st bool     2nd bool
<------------> <------------> <------------> <------------>
     6bits          7bits          1bit          1bit

你还剩一点呢。

使用left shift <<操作实现上述操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40042999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档