描述将base36编号转换为base16的过程,而不转换为base10作为中介。
答案 0 :(得分:2)
假设您有一个函数f
用于将单个base-36-digit转换为base-16,您可以递归地定义转换函数c
,如下所示:对于带有数字的base-36数字a_n ... a_1
n > 1
f(a_1) + 24_16*c(a_n ... a_2)
返回a_1
(因为36在base-16中表示为“24”);对于只有一位数的基数为36的数字f(a_1)
,只返回{{1}}。这显然假设你能够在base-16中进行算术运算。
当然,这里真正的问题是在base-16中进行算术 - 这就是为什么你通常通过一些中间基础进行基本转换,你可以进行算术运算;即纸上的基础10和计算机中的基础-2。
请注意,从base-2转换为base-16是一项非常简单的操作。由于16是2的幂,您不需要执行任何算术:您可以逐位执行转换(或者更确切地说,4位乘4位)。
答案 1 :(得分:1)
是的,您可以直接执行此操作,但是您需要在基数16中进行算术运算。诀窍是预先计算基数为16的36,36 ^ 2,36 ^ 3等的值。例如,转换在基数36中表示为237的数字,在基数16中表示为数字。
一种简单的方法是转换为十进制,或任何可以进行算术运算的中间系统。因此我可能会这样做
2 * 36 ^ 2 + 3 * 36 + 7 = 2707(十进制)
然后从十进制转换为十六进制,产生
10 * 16 ^ 2 + 9 * 16 + 3 = A93(十六进制)
直接解决方案很简单。我这样做是为了让你相信没有必要。只需计算(预先)十六进制的36 ^ 2的值。因此,
36 ^ 2 = 510(十六进制)
36 = 24(十六进制)
存储这些预先计算的值。现在以十六进制执行所有计算。
237(基数36)= 2 * 510 + 3 * 24 + 7(十六进制)
在十六进制算术中进行最后一次扩展,你应该得到十六进制的A93。您完全以十六进制完成了所需的计算,而没有求助于中间基础。即使是36的那些权力的预计算也可以用十六进制来完成。