具有2个未知数的反向函数

时间:2015-05-07 09:07:13

标签: c# bit-shift

在将数据存储到设备之前,我在完成以下功能时遇到了一些困难。

ss = enum + 16
u32ts = number << 8
u32timestamp = ss+u32ts

enumnumber是我试图回来的两个vaules,但是当我从u32timestamp开始时,我就不知道它们是什么。

我试图做的是

uint temp = u32timestamp;
number  = 0;
if (u32timestamp > 100)
{
   number  = (u32timestamp >> 8 & 8 );
   temp = u32timestamp - number ;
}
enum = temp - 16;

但我一直在弄清楚错误的价值观。请帮我解决这个问题。 enum始终在16到21之间,但number可以是任意值。

3 个答案:

答案 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。