I need to extract certain bits of a byte and covert the extract bits back to a hex value.
Example (the value of the byte is 0xD2) :
76543210 bit position
11010010 is 0xD2
- Bit 0-3 defines the channel which is
0010bis0x2 - Bit 4-5 defines the controller which is
01bis0x1 - Bit 6-7 defines the port which is
11bis0x3
I somehow need to get from the byte is 0xD2 to channel is 0x2, controller is 0x1, port is 0x3
I googled allot and found the functions pack/unpack, vec and sprintf. But I’m scratching by head how to use the functions to achieve this. Any idea how to achieve this in Perl ?
What’s the initial format?
You want to start by converting it to a number
Then you use shifts and masks.
(You could use
0b1111,0b11and0b11for the masks. Most people work in hex.)Or let
vecfigure out the masks for you.Here’s an example for
$controller:(Some zeroes omitted for clarity.)