Skip to content
Related Articles

Related Articles

Reverse bytes of a Hexadecimal Number
  • Last Updated : 26 Jul, 2019

Given an unsigned integer N. The task is to reverse all bytes of N without using a temporary variable and print the reversed number.

Examples:

Input: N = 0xaabbccdd
Output: 0xddccbbaa

Input: N = 0xa912cbd4
Output: 0xd4cb12a9

The naive approach is to extract the appropriate byte is to use mask(&) with shift operators.



#define REV(x) ( ((x&0xff000000)>>24) | (((x&0x00ff0000)<<8)>>16) | (((x&0x0000ff00)>>8)<<16) |
((x&0x000000ff) << 24) )

Efficient approach:
The idea is to use shift operators only.

  • Move the position of the last byte to the first byte using left shift operator(<<).
  • Move the position of the first byte to the last byte using right shift operator(>>).
  • Move the middle bytes using the combination of left shift and right shift operator.
  • Apply logical OR (|) to the output of all the above expression, to get the desired output.

Below is the implementation of the above approach :

filter_none

edit
close

play_arrow

link
brightness_4
code

// C program to reverse bytes of a hexadecimal number
#include <stdio.h>
// macro which reverse the hexadecimal integer
#define REV(n) ((n << 24) | (((n>>16)<<24)>>16) | \
                    (((n<<16)>>24)<<16) | (n>>24))
  
// Driver code
int main()
{
    unsigned int n = 0xa912cbd4;
      
    //  n = 0xaabbccdd
    // (n >> 24) - 0x000000aa
    // (n << 24) - 0xdd000000
    // (((n >> 16) << 24) >> 16) - 0xbb00
    // (((n >> 8) << 24) >> 8) - 0xcc0000
    // If output of all the above expression is 
    // OR'ed then it results in 0xddccbbaa
      
    printf("%x is reversed to %x", n, REV(n));
      
    return 0;
}

chevron_right


Output:

a912cbd4 is reversed to d4cb12a9

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :