Lev Levitsky の回答のように、アルゴリズムは簡単に実装できます。
hex(big)[2:-4], hex(big)[-4:]
ただし、65536 未満の数値では失敗します。
それを修正することもできますが、16 進数の文字列を分割するのではなく、数値を分割してから、2 つの半分を 16 進数に変換する方がよいでしょう。
ecatmur の答えは、おそらくこれを行う最も簡単な方法です。
[hex(x) for x in divmod(70000, 65536)]
または、次のような数値で「右シフト/切り捨て」アルゴリズムを変換できます。
hex(x >> 16), hex(x & 0xFFFF)
これらを '0x6' ではなく '0x0006' のような文字列にする必要がある場合は、パーツで 16 進数を呼び出す代わりに、次のようにします。
['%#06x' % (x,) for x in divmod(x, 65536)]
または、より現代的な文字列フォーマット スタイルを使用します。
['0x{:04x}'.format(x) for x in divmod(x, 65536)]
しかし一方で、文字列を連結するのではなく、最初に int に変換してから数値をシフトしてマスクすることで、これを元に戻したいと思うかもしれません。ecatmur の答えの逆は次のとおりです。
int(bighalf) * 65536 + int(smallhalf)
シフト/マスク実装の (同等の) 逆は次のとおりです。
(int(bighalf) << 16) | int(smallhalf)
その場合、左側に余分な 0 は必要ありません。
また、数値が負の値または 4294967295 を超える可能性がある場合、これらのアルゴリズムはどれも機能しないことを指摘する価値がありますが、これらの場合に問題が発生しないためです。