Java将C语言16进制无符号数组转为字符串输出

最近写JNI,遇到一个很麻烦的问题,C语言的unsigned char 16进制数组想要在Java中原样字符串输出,思索了一下午找到了解决方法,代码如下: 

private static String buling(String str){
    return "0" + str;
}

public static String reverse(String s) {
    String r = "";
    for (int i = s.length() - 1; i >= 0; i--) {
        char ch = s.charAt(i);
        r = r + ch;
    }
    while (r.length() < 2) {
        r = buling(r);
    }
    return r;
}

public static String decToHex(int dec) {
    String hex = "";
    while (dec >= 10) {
        int remainder = dec % 16;
        dec = dec / 16;
        if (remainder < 10) {
            hex += remainder;
        } else {
            char ch = (char) ('a' + (remainder - 10));
            hex += ch;
        }
    }
    if (dec != 0) {
        hex += dec;
    }
    return reverse(hex);
}

public static void main(String[] args) {
    String contractid = "";
    for (int i = 0; i < uidMeanBO.getContractid().length; i++) {
        contractid += decToHex(uidMeanBO.getContractid()[i]&0x0FF);
    }
    System.out.println("contractid=" + contractid);
}

注意:其中0x0FF是将1字节的无符号字符进行原样输出,如果是2字节、4字节,请参考以下文章,传送门:

Java处理C语言中的unsigned char类型进行原样输出

我们已通过上面的方式获取到了16进制字符串,想要将16进制转为10进制,请参考以下文章,传送门:

Java中将十六进制转换成十进制

C代码中contractid无符号数组,图示如下:

  Java将C语言16进制无符号数组转为字符串输出_第1张图片

Java代码中最终输出结果,图示如下:

  

到此问题解决。

你可能感兴趣的:(C&Java进制转换)