繁体   English   中英

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

[英]Java generic convert byte array to string (Non hex, decimal)

将字节数组转换为具有所选基数的字符串的最佳方法是什么? 在SO和其他地方有大量示例转换为十六进制字符串。 我在这里主要感兴趣的是转换为十六进制或十进制字符串以外的其他内容 ; 也是一种更通用的方式。

这就是我目前所做的事情:

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字母会更好,这就是为什么我认为我可能会遗漏一些东西。

看起来你正在寻找Base64编码。 这使用64个不同的字符来编码一个值:大写和小写字母(已经是52个字符),数字(10个以上,包括'0'),以及'+'和'/'符号(或' - ')和url-safe变体中的'_')。

如果你使用的是Java 8,那就是Base64类:

String str = Base64.Encoder.encodeToString(data);

否则,Apache Commons也有一个Base64类:

String str = Base64.encodeBase64String(data);

这是一个很好的,实际上,我不确定是否有一个类来实现这一目标。 但是,在不使用BigInteger的情况下执行所需操作的另一种方法是迭代数组并获取输出,例如:

for(byte b : input){
    System.out.print(Integer.toString(b & 0xFF, radix));
}

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

快乐的编码。

问候。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM