我正试图通过LPWAN发出一个信息,而我所面临的问题之一就是尽量缩短我的信息。
例如:
我有两个整数(0-100)和两个布尔( Booleans ),我必须将它们转换为十六进制来发送LPWAN。示例:
当我将其连接为246310 (十六进制:3C226)时,这将花费3个字节。但是,我知道我的第一个整数永远不会大于50,也就是6位。我是否可以让十六进制信息短于3C226?
发布于 2016-10-14 12:27:04
是的,那应该是可能的。
字段的位数是:
integer0:整数0..50,6位。integer1:整数0.80,7位。flag0:布尔值,1位。flag1:布尔值,1位。总共是6+7+1+1= 15位。
以下是如何编码:
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|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;
}发布于 2016-10-14 12:29:28
使用2个字节,可以将该值存储为:
FirstNum Second 1st bool 2nd bool
<------------> <------------> <------------> <------------>
6bits 7bits 1bit 1bit你还剩一点呢。
使用left shift <<操作实现上述操作。
https://stackoverflow.com/questions/40042999
复制相似问题