在二进制文件01010
之外,八进制01122
,十进制整数1234
和十六进制0xFF
,是否有任何想法或技巧如何构建新的数字格式?例如, 0x11AEGH
的范围从 0
- 9
到 {{ 1}} - A
。我打算建一个密码生成器,所以如果有人可以在它上面添加一些可能有帮助的东西,那将会非常有用。
首先,有没有可以做到这一点的功能?基本上我想将H
转换为二进制,八进制,整数等等......
答案 0 :(得分:3)
在N-ary系统中格式化数字需要两件事:字母表,以及获得整数除法结果+余数的能力。
考虑使用拉丁字母格式化base-26系统中的数字。重复获得除以26的余数R
,选择字母编号R
,并将其添加到您要格式化的数字的前面。整数除以26,并在算法的下一步中使用它。当你达到零时停止。
例如,如果您在base-26中打印1234
,则可以这样执行:
M
; 1234/26是47 V
; 47/26是1 B
。 1/26为零;停止。所以base-26中的1234
为BVM
。
要转换回来,从前面开始,并从每个数字中依次减去指定的“零”(如果是上例)A
,如下所示:
B
- A
为1.结果为1
V
- A
是21.结果是1 * 26 + 21,这是47 M
- A
为12.结果为47 * 26 + 12,即1234。答案 1 :(得分:0)
您可以使用像Long.parseLong(String representation, int radix)和Long.toString(long value, int radix)
这样的函数,因为它们在Java中。其他语言也可能具有类似的功能。
此方法限制最大可能的基数(基数),并且您无法控制表示不同数字的字符(使用字母数字字符)。然而,它是一个现成的解决方案,没有任何额外的编码。