I have come up with following preliminary version. This will need more testing but it works for the example case found in https://en.bitcoin.it/wiki/Difficulty. void hexdump(unsigned char *data, int len) { int c = 0; while (c < len) { cout << hex << std::setw(2) << std::setfill('0') << static_cast<int>(data[c++]); } printf("\n"); } bool convert_bits(uint32_t bits, uint64_t* value, int val_len = 4) { assert(val_len == 4); assert(value != NULL); if (val_len != 4 || value == NULL) { return false; } auto x = 8 * ((bits >> 24) - 3); auto val = bits & 0x00FFFFFF; value[4 - (x / 64) - 1] = htobe64(val << (x % 64)); return true; } int main() { uint64_t num[4] = { 0, 0, 0, 0 }; if(convert_bits(0x1b0404cb, num)) { hexdump((unsigned char *)num, sizeof(uint64_t) * 4); } return 0; } This prints: 00000000000404cb000000000000000000000000000000000000000000000000