4

我在 char[] 数组中有整数数据。示例:12、03、10。我想以字符串的十六进制格式发送数据。

示例:0C030A

但是在转换成十六进制后,我得到了 C3A。
请建议我获取正确的数据为 0C030A。

我正在使用以下代码

String messageBody = "A3";
SimpleDateFormat sdf = new SimpleDateFormat("MM:dd:yy:HH:mm:ss");
String currentDateandTime = sdf.format(new Date(mLocation.getTime()));
char[] temp;
temp = currentDateandTime.split(delimiter);
for( int i = 0; i < temp.length; i++ )
{
    messageBody += Integer.toHexString (Integer.parseInt( temp[i]));
}
4

2 回答 2

4

你可以使用String.format()with "%02x"02表示用零填充,直到长度为 2。x表示十六进制。

messageBody += String.format("%02x", Integer.parseInt(temp[i]));
于 2012-11-02T17:39:55.523 回答
0

String.format()在性能受到关注的情况下(创建大量孤立对象并立即丢弃),它可能是相当重量级的。

如果你想要更紧一点的东西,你可以这样做:

final StringBuilder sb = new StringBuilder("0x00000000");
String fmt(int item) {

    int tmp;
    char c;

    for (int i = 9; i >= 2; i--) {

        tmp = (item & 0xF); item >>= 4;
        c = (char) (tmp < 10 ? '0' + tmp : 'A' + tmp - 10);
        sb.setCharAt(i, c);
    }

    return sb.toString();
}

你可以进一步优化它(即使用更少的变量并执行更少的迭代),但我认为现在这已经足够详尽了:) 不是线程安全的等。

于 2012-11-03T16:16:09.423 回答