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