Java泛型将字节数组转换为字符串(非十六进制,十进制)

时间:2015-02-24 22:06:35

标签: java arrays string

将字节数组转换为具有所选基数的字符串的最佳方法是什么? 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字母会更好,这就是为什么我认为我可能会遗漏一些东西。

2 个答案:

答案 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));
}

不确定某个特定类正在进行转换,但这是我所知道的另一种方法,可能对您或其他人有用。

快乐的编码。

问候。