fork download
  1. /******************************************************************************
  2.  
  3.   Online C Compiler.
  4.   Code, Compile, Run and Debug C program online.
  5. Write your code in this editor and press "Run" button to compile and execute it.
  6.  
  7. *******************************************************************************/
  8.  
  9. #include <stdio.h>
  10. #include <stdint.h>
  11. #include <stdbool.h>
  12.  
  13.  
  14. #define __MASK_BYTE_0 0xFFu
  15. #define __MASK_BYTE_1 0xFF00u
  16. #define __MASK_BYTE_2 0xFF0000ul
  17. #define __MASK_BYTE_3 0xFF000000ul
  18.  
  19. #define __MASK_WORD_LOW 0xFFFFul
  20. #define __MASK_WORD_HI 0x0000FFFFul
  21.  
  22. #define __SHIFT_BYTE_0 0u
  23. #define __SHIFT_BYTE_1 8u
  24. #define __SHIFT_BYTE_2 16u
  25. #define __SHIFT_BYTE_3 24u
  26.  
  27.  
  28. bool isCpuLittleEndian()
  29. {
  30. static const union {
  31. uint32_t wordValue;
  32. uint8_t byteValue[4];
  33. } TEST = {0x12345678u};
  34.  
  35. return (TEST.byteValue[0] == 0x78u);
  36. }
  37.  
  38. uint8_t WORD32_BYTE0( uint32_t word)
  39. {
  40. return (uint8_t)(word & __MASK_BYTE_0);
  41. }
  42.  
  43. uint8_t WORD32_BYTE1( uint32_t word)
  44. {
  45. return (uint8_t)(((word & __MASK_BYTE_1) >> __SHIFT_BYTE_1));
  46. }
  47.  
  48. uint8_t WORD32_BYTE2( uint32_t word)
  49. {
  50. return (uint8_t)(((word & __MASK_BYTE_2) >> __SHIFT_BYTE_2));
  51. }
  52.  
  53. uint8_t WORD32_BYTE3( uint32_t word)
  54. {
  55. return (uint8_t)(((word & __MASK_BYTE_3) >> __SHIFT_BYTE_3));
  56. }
  57.  
  58. int main()
  59. {
  60. uint32_t val = 0x11223344;
  61. if(isCpuLittleEndian())
  62. printf("Little Endian\n");
  63. else
  64. printf("Big Endian\n");
  65.  
  66. printf("%x\n", WORD32_BYTE0(val));
  67.  
  68. return 0;
  69. }
Success #stdin #stdout 0.01s 5324KB
stdin
123
stdout
Little Endian
44