如何在Java中将uint8字节数组转换为字符串

如何在Java中将uint8字节数组转换为字符串,java,android,arrays,Java,Android,Arrays,我有一个unint8字节数组,其中一个函数从库返回。库使用gomobile从golang交叉编译,golang有unint8类型的字节数组 字节数组是 [4, 19, 35, 76, -77, -6, 106, -70, -95, -37, -58, 2, 20, 94, 34, -73, 79, 69, -84, -90, 30, 27, 125, -102, -116, 105, 52, 89, -62, 116, -92, 27, -56, 98, -124, 42, -2, -109,

我有一个unint8字节数组,其中一个函数从库返回。库使用gomobile从golang交叉编译,golang有unint8类型的字节数组

字节数组是

[4, 19, 35, 76, -77, -6, 106, -70, -95, -37, -58, 2, 20, 94, 34, -73, 79, 69, -84, -90, 30, 27, 125, -102, -116, 105, 52, 89, -62, 116, -92, 27, -56, 98, -124, 42, -2, -109, -30, -101, -60, -12, -103, 28, 26, 46, -54, -33, 61, -17, 115, 39, -14, -15, -60, -109, -119, -106, -128, 95, 65, 84, 12, -56, -76]
我想用java将这个字节数组转换成字符串

我知道可以使用newstring()将字节转换为字符串

但是当我转换字节数组时,我得到的随机字符是


♦‼#L��J����☻¶^\"�OE��▲��i4Y�T�B�*�����∟→.��=�是的��ē���_在♀ȴ

我不确定,您的预期输出是什么。此函数将输出如下内容:

010203041B1A

公共类字节{
私有静态final char[]HEX_ARRAY=“0123456789ABCDEF”.toCharArray();
私有静态最终整型掩码字节大小=0xFF;
私有静态最终整数掩码第二元组=0x0F;
私有静态final int SHIFT\u FIRST\u TUPLE=4;
公共静态字符串bytesToHexString(最终字节…字节){
if(bytes==null | | bytes.length==0){
返回“”;
}
final char[]hexChars=新字符[bytes.length*2];
对于(int j=0;j>>SHIFT_FIRST_TUPLE];
hexChars[j*2+1]=HEX_数组[v&MASK_SECOND_TUPLE];
}
返回新字符串(hexChars);
}
}

您检查过输入字符串是什么吗?输入字符串是从密钥对派生的公钥,可以是
D5F8B59CC5606F653083C1445824328F46C91F98BE3A5CC521052E7B3C1C2D
,生成字节数组的字符串可以是
0x04127A7A32BC31691052781EC6B37EBFE841D9CA12B08FB5EBD8FB391D437DAD2F70FE3671040064E846577866428ea61dc2e720799ecf2dce0affcabfe5749e
String input=“D5F8B59CC5606F653083C1445884328F46C91F98BE3A5CC521052E7B3C1C2D”;byte[]bytes=input.getBytes();System.out.println(Arrays.toString(bytes));String output=new String(bytes);System.out.println(output);//打印D5F8B59CC5606F653083C14458284328F46C91F98BE3A5C6521052E7B3C1C2D之间还有其他的n类似于其他转换这是输入字符串的字节数组[100, 53, 102, 56, 98, 53, 57, 99, 99, 53, 54, 48, 54, 102, 54, 53, 51, 48, 56, 51, 99, 49, 52, 52, 53, 56, 50, 56, 52, 51, 50, 56, 102, 52, 54, 99, 57, 49, 102, 57, 56, 98, 101, 51, 97, 53, 99, 99, 54, 53, 50, 49, 48, 53, 50, 101, 55, 98, 51, 99, 49, 99, 50, 100]使用上述方法,我的输出应该是
0x04127a7a3a32bc1691052781ec6b37ebfe841d9ca12b08fb5ebd8fb391d437dad2f70fe367104006418e846577866428ea61dc2e720799ecf2dce0affcabfe5749e
基本上这段代码应该适合您。也许您需要采用使用非大写字母的
HEX_数组
变量。
public class ByteUtils {

private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
private static final int MASK_BYTE_SIZE = 0xFF;
private static final int MASK_SECOND_TUPLE = 0x0F;
private static final int SHIFT_FIRST_TUPLE = 4;

public static String bytesToHexString(final byte... bytes) {
    if (bytes == null || bytes.length == 0) {
        return "";
    }
    final char[] hexChars = new char[bytes.length * 2];
    for (int j = 0; j < bytes.length; j++) {
        int v = bytes[j] & MASK_BYTE_SIZE;
        hexChars[j * 2] = HEX_ARRAY[v >>> SHIFT_FIRST_TUPLE];
        hexChars[j * 2 + 1] = HEX_ARRAY[v & MASK_SECOND_TUPLE];
    }
    return new String(hexChars);
}
}