首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基> Character.MAX_RADIX的Java数

基> Character.MAX_RADIX的Java数
EN

Stack Overflow用户
提问于 2011-04-27 11:39:11
回答 2查看 12.6K关注 0票数 12

我有一个五个字符的字符串,我想使用这五个字符作为一个ASCII编码(可打印)数字。实现这一目标的最简单方法是使用

代码语言:javascript
复制
Long.toString(number, Character.MAX_RADIX);

这将给我从"0""zzzzz"的号码。不幸的是,Long.toString(int, int)只支持小写字母,不支持大写字母.这意味着最大基数是36,而我可以编码的最高数字是36^5 - 1 = 60 466 175。如果我可以同时使用较低的大写字母,我将得到62的最大基数,最高可编码数是62^5 - 1 = 916 132 831

除了复制Long的源代码和扩展可能的数字之外,还有什么地方我应该去看看,首先,这里已经实现了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-27 12:16:59

您没有指定字符是否需要为可打印的 ASCII:

  • 如果他们这样做了,那么你可以去95^5。从空间(SP)到倾斜(~)有95个可打印的ASCII字符。
  • 如果他们没有,那么你可以去128^5 == 2^35

无论哪种方式,进行转换的算法都是简单的,并且比Long.toString(...)的扩展更简单。(您大概不必担心字符<->数字映射中的符号、范围错误或漏洞。从零开始编写代码会更容易。)

但是,我不知道扩展基数的任何现有实现。

票数 3
EN

Stack Overflow用户

发布于 2011-04-27 11:47:49

如果您愿意使用字母数字以外的两个字符,则可以使用Base64编码。

使用来自Base64Apache Commons Codec,您可以获得1073741824个可能的值,如下所示:

代码语言:javascript
复制
byte bytes[] = new byte[4];
bytes[0] = (byte) ((value >> 24) & 0xFF);
bytes[1] = (byte) ((value >> 16) & 0xFF);
bytes[2] = (byte) ((value >> 8) & 0xFF);
bytes[3] = (byte) (value & 0xFF);
String encoded = Base64.encodeBase64String(bytes).substring(1, 6);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5803454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档