在java中将byte salt转换为String

我试图将byte []格式的生成salt值转换为String。 但每次它转换为特殊字符。

我使用以下方式将byte []转换为String:

byte[] salt = new byte[] { 50, 111, 8, 53, 86, 35, -19, -47 }; String saltString = new String(salt,"UTF-8"); System.out.println(saltString); 

但输出就像??@?

你可以使用base64编码转换。 为此,您可以使用javax.xml.bind.DatatypeConverter.printBase64Binary方法

例如:

  byte[] salt = new byte[] { 50, 111, 8, 53, 86, 35, -19, -47 }; System.out.println(DatatypeConverter.printBase64Binary(salt)); 

我还想补充一下这个答案

byte []和String之间的“正确转换”是明确说明要使用的编码。 如果以byte []开头并且实际上不包含文本数据,则没有“正确的转换”。 字符串用于文本,byte []用于二进制数据,唯一真正明智的做法是避免在它们之间进行转换,除非你绝对不得不这样做。

您可以先将其转换为base64然后将其转换为get字符串。

 byte[] salt = new byte[] { 50, 111, 8, 53, 86, 35, -19, -47 }; String encoded = new BASE64Encoder().encode(salt); System.out.print(encoded);