Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP Bit shifting in code?

Tags:

php

Can someone help me understand this ancient code?

$a = 00040000000002;
$n = sscanf($a,"%02x%02x%02x%02x%02x%02x%02x",$r[7],$r[6],$r[5],$r[4],$r[3],$r[2],$r[1]);

$ptemp = $r[1] + (($r[2] & 0x1F) << 8);
$l[$i] = (($r[2] & 0xE0) >> 5) + ($r[3] << 3);
$m[$i] = $r[4] + (($r[5] & 0x03) << 8);
$h[$i] = (($r[5] & 0xFC) >> 2) + (($r[6] & 0x03) << 6);
$dist[$i] = (($r[6] & 0xFC) >> 2) + (($r[7] & 0x0F) << 6);
$fruittoday[$i] = ($r[7] & 0xF0) >> 4;

I understand the sscanf, but I'm not sure what is going on with the & 0x1f << 8, etc.

Any ideas?

like image 423
TheBounder Avatar asked Jun 19 '26 08:06

TheBounder


1 Answers

They're using Bitwise Operators to check if specific bits are turned on.

In the example you've provided, they're confirming the first 5 bits are 1's then shifting all bits to the left 8 places. (Although it seems like in this case they're starting with 0 (00000000), checking if 0x1F are on (00011111) which would still be 0, then shifting them left 8 places (put in to the 2^8th position)

For reference, I would check out php's manual on bitwise operators. They list some example of what's going on here. If you're really curious, just echo the variables as they are manipulated (or break it out in to separate operations) and then examine them).

like image 139
Brad Christie Avatar answered Jun 21 '26 22:06

Brad Christie