ZoomVirus
ZoomVirus

Reputation: 615

reverse function with 2 unknowns

I'm having some difficulty reversing the following functions done before storing data to a device.

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

enum and number are the two vaules I'm trying to get back but I'm unawaire of what either of them are when I start with u32timestamp.

What I have tried to do is

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

But I keep getting out the incorrect values. Please help me fix this. enum is always between 16 and 21 but number can be positive any value.

Upvotes: 0

Views: 55

Answers (3)

Felice Pollano
Felice Pollano

Reputation: 33252

var a = u32timestamp&0xFF;
var number= u32timestamp >>8;
var en = a-16;

the coding place "number" shifting eight bit to the left, so a regular 8 shift on the right will recover it by trashing the LS bits. Then we mask the lower bit to recover en.

Upvotes: 1

ircharlie
ircharlie

Reputation: 79

public void Decode
{
   uint u32timestamp = 31778;
   var number = u32timestamp >> 8;
   var temp = u32timestamp - (number << 8);
   var en  = temp - 16;
}

Upvotes: 1

General-Doomer
General-Doomer

Reputation: 2761

// 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;

Upvotes: 2

Related Questions