Advertisement
Guest User

Untitled

a guest
Apr 26th, 2017
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.59 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3.  
  4. // prototypes
  5. void unpackCharacters(char[], unsigned);
  6. void displayBits(unsigned);
  7.  
  8. const unsigned MASK1 = 4278190080;
  9. const unsigned MASK2 = 16711680;
  10. const unsigned MASK3 = 65280;
  11. const unsigned MASK4 = 255;
  12.  
  13. int main() {
  14.    char characters[4];
  15.    unsigned packed{1633903975}; // a, c, e, g
  16.  
  17.    std::cout << "The packed character representation is:\n";
  18.    displayBits(packed);
  19.  
  20.    // demonstrate unpacking of characters
  21.    unpackCharacters(characters, packed);
  22.    std::cout << "\nThe unpacked characters are: ";
  23.    for (size_t i{0}; i < 4; ++i) {
  24.       std::cout << characters[i] << " ";
  25.    }
  26.    std::cout << std::endl;
  27.  
  28.    std::cout << "\nThe unpacked characters in bits are:" << std::endl;
  29.    for (size_t i{0}; i < 4; ++i) {
  30.       displayBits(characters[i]);
  31.       std::cout << '\n';
  32.    }
  33.    std::cout << '\n';
  34. }
  35.  
  36. // take apart the characters
  37. void unpackCharacters(char characters[], unsigned pack)
  38. {
  39.     characters[0] = pack;
  40.     characters[0] &= MASK1;
  41.     characters[0] >>= 8;
  42.  
  43.     characters[1] = pack;
  44.     characters[1] &= MASK2;
  45.     characters[1] >>= 8;
  46.  
  47.     characters[2] = pack;
  48.     characters[2] &= MASK3;
  49.     characters[2] >>= 8;
  50.  
  51.     characters[3] = pack;
  52.     characters[3] &= MASK4;
  53.     characters[3] >>= 8;
  54. }
  55.  
  56. // display the bits of value
  57. void displayBits(unsigned value)
  58. {
  59.     const int SHIFT = 8 * sizeof(unsigned ) - 1;
  60.     const unsigned MASK = 1 << SHIFT;
  61.  
  62.     std::cout << std::setw(10) << value << " = ";
  63.  
  64.     for(unsigned i = 1; i <= SHIFT + 1; i++){
  65.         std::cout << (value & MASK ? '1' : '0');
  66.         value <<= 1;
  67.     }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement