momo33 has asked for the wisdom of the Perl Monks concerning the following question:
Hello Perlmonks,
From an encrypted string I need to decode a 2-byte part, 16 bit. The 16 bit represent a date (year, month, day). The decoding is done using Crypt::DES. The 2-byte part is extracted with $packed_d = substr($packed_d,0,2); I then need the first 7 bits converted into a year, 4 bits for the month, and 5 bits for the day.
My code for selection of the bits does not work. The bitwise-& with my hex and packed_d always returns 0x00. In the example I construct a packed_d that I found in the data. Can someone tell me why "$packed_d & 0xFE00" always returns 0x00 ? (I replaced 0xFE00 with 0xFFFF and it still returns 0x00)
Thank you.
# raw contains the decrypted data my ($p1,$p1,$p3,$packed_d)=split(/\000/,$raw,4); $packed_d = substr($packed_d,0,2); #cut padding # temporary construction of packed_d my( $packed_d ) = pack( 'H4', d262 ); my $y = (($packed_d & 0xFE00) >> 9) + 4; my $m = (($packed_d & 0x01E0) >> 5) - 1; my $d = ($packed_d & 0x001F);
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: selecting and converting a bitstring
by BrowserUk (Patriarch) on Nov 13, 2015 at 13:00 UTC | |
by momo33 (Beadle) on Nov 13, 2015 at 14:00 UTC |