字符串到java中的byte []而不进行转换

时间:2015-04-26 17:07:32

标签: android

我的函数返回String已经以字节为单位,例如

String ss = Long.toHexString(checksum);
return ss;

现在String ss以字节为单位返回结果;

result is = ff32ge34

这是crc32校验和

现在在下一个方法中我想在byte []

中使用这个字符串

例如

byte [] any = ss;

但是因为ss是String所以错误即将来临,但实际上ss String是以字节为单位的校验和,所以我可以在byte []中使用这个字符串吗?

我想要这样

byte[] any = new byte[]{0xff ,0x32 ,0xge,0x34};

1 个答案:

答案 0 :(得分:0)

您可以使用此函数将原始长整数转换为字节数组。它比将String转换为字节数组

更简单,也更快
public byte[] longToByteArray(long value) {
    return new byte[] {
        (byte) (value >> 56),
        (byte) (value >> 48),
        (byte) (value >> 40),
        (byte) (value >> 32),
        (byte) (value >> 24),
        (byte) (value >> 16),
        (byte) (value >> 8),
        (byte) value
    };
}

但是如果你坚持将String转换为字节数组,你可以使用类似的东西

public static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len/2];

    for(int i = 0; i < len; i+=2){
        data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16));
     }

    return data;
}

但是正如你所看到的,它很丑陋并且比转换长字节数组慢得多。

您可以使用此函数来反转字节数组的顺序

public static void reverse(byte[] data) {
    for (int left = 0, right = data.length - 1; left < right; left++, right--) {
        // swap the values at the left and right indices
        byte temp = data[left];
        data[left]  = data[right];
        data[right] = temp;
    }
}