fork download
  1. #include <stdint.h>
  2. #include <stdio.h>
  3.  
  4. template<int N> uint32_t bin2int32(const char* bin)
  5. {
  6. return ( bin2int32<N/2>(bin) << (N/2) ) + bin2int32<N/2>( bin + (N/2) );
  7. }
  8.  
  9. template<> uint32_t bin2int32<4>(const char* bin)
  10. {
  11. uint32_t i = *(uint32_t*)bin;
  12. return ((i << 3) & 0x08) +
  13. ((i >> 6) & 0x04) +
  14. ((i >> 15) & 0x02) +
  15. ((i >> 24) & 0x01);
  16. }
  17.  
  18. template<int N> uint64_t bin2int64(const char* bin)
  19. {
  20. return ( bin2int64<N/2>(bin) << (N/2) ) + bin2int64<N/2>( bin + (N/2) );
  21. }
  22.  
  23. template<> uint64_t bin2int64<8>(const char* bin)
  24. {
  25. uint64_t i = *(uint64_t*)bin;
  26. return ((i << 7) & 0x80) +
  27. ((i >> 2) & 0x40) +
  28. ((i >> 11) & 0x20) +
  29. ((i >> 20) & 0x10) +
  30. ((i >> 29) & 0x08) +
  31. ((i >> 38) & 0x04) +
  32. ((i >> 47) & 0x02) +
  33. ((i >> 56) & 0x01);
  34. }
  35.  
  36. #define bin2int bin2int32
  37.  
  38. int main()
  39. {
  40. printf("0x%08X\n", bin2int<32>("00000001001000110100010101100111"));
  41. printf("0x%08X\n", bin2int<32>("10001001101010111100110111101111"));
  42.  
  43. return 0;
  44. }
  45.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty