-2

在二进制01010、八进制01122、十进制整数1234和十六进制之外0xFF,有没有人知道如何构建新的数字格式?例如,0x11AEGH它的范围是否从0-9A- H。我将构建密码生成器,所以如果有人可以在上面放一些可能有帮助的东西,那将非常有帮助。

首先,是否有任何功能可以做到这一点?基本上我想转换0x11AEGH成二进制,八进制,整数等等......

4

2 回答 2

3

在 N 元系统中格式化一个数字需要两件事:一个字母表,以及获得整数除法 + 余数结果的能力。

考虑使用拉丁字母在 base-26 系统中格式化数字。重复获得R除以 26 的余数,选择字母 number R,并将其添加到您正在格式化的数字的前面。将数字除以 26 的整数,并将其用于算法的下一步。当你到达零时停止。

例如,如果您1234使用 base-26 打印,您可以这样做:

  • 1234 % 26 是 12 M。1234/26 为 47
  • 47 % 26 是 21 V。47 / 26 是 1
  • 1 % 26 是 1。添加B。1 / 26 为零;停止。

所以1234在 base-26 中是BVM.

要转换回来,从前面开始,然后A从每个数字中依次减去指定的“零”(在上面的例子中),如下所示:

  • B-A是 1。结果是1
  • V-A是 21。结果是 1*26+21,即 47
  • M-A是 12。结果是 47*26+12,即 1234。
于 2013-02-12T01:55:35.567 回答
0

您可能可以使用Long.parseLong(String representation, int radix) 之类的函数,Long.toString(long value, int radix)就像它们在 Java 中一样。其他语言也可能具有类似的功能。

这种方法限制了最大可能的基数(基数),并且您无法控制表示不同数字的字符(使用字母数字字符)。然而,它是一个现成的解决方案,无需任何额外的编码。

于 2013-02-12T08:17:02.380 回答