在将数据存储到设备之前,我在完成以下功能时遇到了一些困难。
ss = enum + 16
u32ts = number << 8
u32timestamp = ss+u32ts
enum
和number
是我试图回来的两个vaules,但是当我从u32timestamp
开始时,我就不知道它们是什么。
我试图做的是
uint temp = u32timestamp;
number = 0;
if (u32timestamp > 100)
{
number = (u32timestamp >> 8 & 8 );
temp = u32timestamp - number ;
}
enum = temp - 16;
但我一直在弄清楚错误的价值观。请帮我解决这个问题。 enum
始终在16到21之间,但number
可以是任意值。
答案 0 :(得分:2)
// sample a and b
int a = 5, b = 7;
int ss = a + 16;
int u32ts = b << 8;
int u32timestamp = ss + u32ts;
// reversing...
int rev_b = u32timestamp >> 8;
int rev_ss = u32timestamp - (rev_b << 8);
int rev_a = rev_ss - 16;
答案 1 :(得分:1)
public void Decode
{
uint u32timestamp = 31778;
var number = u32timestamp >> 8;
var temp = u32timestamp - (number << 8);
var en = temp - 16;
}
答案 2 :(得分:1)
var a = u32timestamp&0xFF;
var number= u32timestamp >>8;
var en = a-16;
编码地点&#34;数字&#34;将8位向左移位,因此右侧的常规8位移位将通过丢弃LS位来恢复它。然后我们屏蔽低位以恢复en。