#include <stdint.h>
#include <stdio.h>
template<int N> uint32_t bin2int32(const char* bin)
{
return ( bin2int32<N/2>(bin) << (N/2) ) + bin2int32<N/2>( bin + (N/2) );
}
template<> uint32_t bin2int32<4>(const char* bin)
{
uint32_t i = *(uint32_t*)bin;
return ((i << 3) & 0x08) +
((i >> 6) & 0x04) +
((i >> 15) & 0x02) +
((i >> 24) & 0x01);
}
template<int N> uint64_t bin2int64(const char* bin)
{
return ( bin2int64<N/2>(bin) << (N/2) ) + bin2int64<N/2>( bin + (N/2) );
}
template<> uint64_t bin2int64<8>(const char* bin)
{
uint64_t i = *(uint64_t*)bin;
return ((i << 7) & 0x80) +
((i >> 2) & 0x40) +
((i >> 11) & 0x20) +
((i >> 20) & 0x10) +
((i >> 29) & 0x08) +
((i >> 38) & 0x04) +
((i >> 47) & 0x02) +
((i >> 56) & 0x01);
}
#define bin2int bin2int32
int main()
{
printf("0x%08X\n", bin2int<32>("00000001001000110100010101100111"));
printf("0x%08X\n", bin2int<32>("10001001101010111100110111101111"));
return 0;
}
I2luY2x1ZGUgPHN0ZGludC5oPgojaW5jbHVkZSA8c3RkaW8uaD4KCnRlbXBsYXRlPGludCBOPiB1aW50MzJfdCBiaW4yaW50MzIoY29uc3QgY2hhciogYmluKQp7CiAgICByZXR1cm4gKCBiaW4yaW50MzI8Ti8yPihiaW4pIDw8IChOLzIpICkgKyBiaW4yaW50MzI8Ti8yPiggYmluICsgKE4vMikgKTsKfQoKdGVtcGxhdGU8PiB1aW50MzJfdCBiaW4yaW50MzI8ND4oY29uc3QgY2hhciogYmluKQp7CiAgICB1aW50MzJfdCBpID0gKih1aW50MzJfdCopYmluOwogICAgcmV0dXJuICgoaSA8PCAgMykgJiAweDA4KSArCiAgICAgICAgICAgKChpID4+ICA2KSAmIDB4MDQpICsKICAgICAgICAgICAoKGkgPj4gMTUpICYgMHgwMikgKwogICAgICAgICAgICgoaSA+PiAyNCkgJiAweDAxKTsKfQoKdGVtcGxhdGU8aW50IE4+IHVpbnQ2NF90IGJpbjJpbnQ2NChjb25zdCBjaGFyKiBiaW4pCnsKICAgIHJldHVybiAoIGJpbjJpbnQ2NDxOLzI+KGJpbikgPDwgKE4vMikgKSArIGJpbjJpbnQ2NDxOLzI+KCBiaW4gKyAoTi8yKSApOwp9Cgp0ZW1wbGF0ZTw+IHVpbnQ2NF90IGJpbjJpbnQ2NDw4Pihjb25zdCBjaGFyKiBiaW4pCnsKICAgIHVpbnQ2NF90IGkgPSAqKHVpbnQ2NF90KiliaW47CiAgICByZXR1cm4gKChpIDw8ICA3KSAmIDB4ODApICsKICAgICAgICAgICAoKGkgPj4gIDIpICYgMHg0MCkgKwogICAgICAgICAgICgoaSA+PiAxMSkgJiAweDIwKSArCiAgICAgICAgICAgKChpID4+IDIwKSAmIDB4MTApICsKICAgICAgICAgICAoKGkgPj4gMjkpICYgMHgwOCkgKwogICAgICAgICAgICgoaSA+PiAzOCkgJiAweDA0KSArCiAgICAgICAgICAgKChpID4+IDQ3KSAmIDB4MDIpICsKICAgICAgICAgICAoKGkgPj4gNTYpICYgMHgwMSk7Cn0KCiNkZWZpbmUgYmluMmludCBiaW4yaW50MzIKCmludCBtYWluKCkKewoJcHJpbnRmKCIweCUwOFhcbiIsIGJpbjJpbnQ8MzI+KCIwMDAwMDAwMTAwMTAwMDExMDEwMDAxMDEwMTEwMDExMSIpKTsKCXByaW50ZigiMHglMDhYXG4iLCBiaW4yaW50PDMyPigiMTAwMDEwMDExMDEwMTAxMTExMDAxMTAxMTExMDExMTEiKSk7CgoJcmV0dXJuIDA7Cn0K