Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java通用转换字节数组到字符串(非十六进制,十进制)_Java_Arrays_String - Fatal编程技术网

Java通用转换字节数组到字符串(非十六进制,十进制)

Java通用转换字节数组到字符串(非十六进制,十进制),java,arrays,string,Java,Arrays,String,将字节数组转换为带基数的字符串的最佳方法是什么?在S.O.和其他地方有大量转换为十六进制字符串的示例。我在这里主要感兴趣的是转换成除十六进制或十进制字符串以外的其他字符串;也是一种更通用的方法 这就是我目前所做的: byte[] input; String MyStr = new BigInteger(input).toString(radix); 这是可行的,但因为Java有一个基数的概念,正如在中使用的那样。这似乎是中定义的明确目的。是否应该有更好的方法来实现这一点,而不是首先将字节数组转

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

这就是我目前所做的:

byte[] input;
String MyStr = new BigInteger(input).toString(radix);
这是可行的,但因为Java有一个基数的概念,正如在中使用的那样。这似乎是中定义的明确目的。是否应该有更好的方法来实现这一点,而不是首先将字节数组转换为BigInteger?感觉我的Java知识遗漏了一些基本的标准类

编辑: 我想将其用于表示(和打印)不同类型的原始二进制数据的压缩方式。这是我目前使用的实际基数:

String MyStr = new BigInteger(data).toString(Character.MAX_RADIX);

最大基数(36)使用小写字母和数字的组合。这提供了一个不错的压缩,但如果基数可以包括大写字母,那就更好了,这就是为什么我认为我可能遗漏了一些东西

这是个好主意,事实上,我也不确定是否有一门课可以做到这一点。但不使用BigInteger的另一种方法是迭代数组并获得输出,如:

for(byte b : input){
    System.out.print(Integer.toString(b & 0xFF, radix));
}
不确定是否有特定的类进行转换,但我知道这是另一种方法,可能对您或其他人有用

快乐编码


问候。

您似乎在寻找编码。这使用了64个不同的字符来编码一个值:大写和小写字母(已经有52个字符)、数字(10个以上,包括“0”)和“+”和“/”符号(或者url安全变体中的“-”和“")

如果您使用的是Java 8,则有以下类:

否则,Apache Commons也有一个类:

String str = Base64.encodeBase64String(data);

你能给出字节的例子和你期望得到的结果吗?对我来说,这是一种非常面向对象的方法,你可以得到值表示,然后转换成字符串。你担心表现吗?代码至少是不言自明的。@Bohemian。进行了轻微的编辑以包含我的用法基数。我假设您的输入是
字节[]
,而不是
字节[]
,因为没有接受
字节[]
@ericbn的BigInteger构造函数。正确的!我把它改成了byte[],谢谢!这是非常有用的,而且现在已经成为Java8的一部分。我应该想到这一点。有时我仍然需要基数为2和16才能进行调试,但在大多数情况下,Base64应该可以。
String str = Base64.encodeBase64String(data);