将字节数组转换为具有所选基数的字符串的最佳方法是什么? 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)使用小写字母和数字的组合。这给了一个不错的压缩,但如果基数可以包括UPPER字母会更好,这就是为什么我认为我可能会遗漏一些东西。
答案 0 :(得分:3)
好像你正在寻找Base64编码。这使用64个不同的字符来编码一个值:大写和小写字母(已经是52个字符),数字(10个以上,包括'0'),以及'+'和'/'符号(或' - ')和url-safe变体中的'_'。
如果你使用的是Java 8,那就是Base64类:
String str = Base64.Encoder.encodeToString(data);
否则,Apache Commons也有一个Base64类:
String str = Base64.encodeBase64String(data);
答案 1 :(得分:0)
这是一个好的,实际上,我不确定是否有一个类来实现这一目标。但是,在不使用BigInteger的情况下执行所需操作的另一种方法是迭代数组并获取输出,如:
for(byte b : input){
System.out.print(Integer.toString(b & 0xFF, radix));
}
不确定某个特定类正在进行转换,但这是我所知道的另一种方法,可能对您或其他人有用。
快乐的编码。
问候。