将字节数组转换为具有所选基数的字符串的最佳方法是什么? S.O. 上有大量示例。和其他地方转换为十六进制字符串。我在这里主要感兴趣的是将十六进制或十进制字符串转换为其他;也是一种更通用的方式。
这是我目前所做的:
byte[] input;
String MyStr = new BigInteger(input).toString(radix);
这行得通,但是由于 Java 有基数的概念,如 Integer 中所使用的那样.这似乎是 Character 中定义的明确目的.难道不应该有比先将字节数组转换为 BigInteger 更好的方法吗?感觉我的 Java 知识遗漏了一些基本的标准类?
编辑: 我想用它来表示(和打印)不同类型的原始二进制数据的压缩方式。这是我目前使用的实际基数:
String MyStr = new BigInteger(data).toString(Character.MAX_RADIX);
MAX_RADIX (36) 使用小写字母和数字的组合。这提供了一个不错的压缩,但如果基数可以包含大写字母会更好,这就是为什么我认为我可能会遗漏一些东西。
最佳答案
你好像在找Base64编码。这使用 64 个不同的字符来编码一个值:大写和小写字母(已经有 52 个字符)、数字(另外 10 个,包括“0”)以及“+”和“/”符号(或“-”和 url 安全变体中的“_”)。
如果您使用的是 Java 8,则有 Base64类:
String str = Base64.Encoder.encodeToString(data);
否则,Apache Commons 有一个 Base64类也是:
String str = Base64.encodeBase64String(data);
关于Java泛型将字节数组转换为字符串(非十六进制,十进制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28707283/