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