2012-11-02 66 views
4

我在char []数组中有Integer数据。例如:12,03,10. 我想以字符串的十六进制格式发送数据。想要在java中发送十六进制字符串数据

例如: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])); 
} 
+0

亲爱的Nambari,感谢您的快速响应。按照您的建议尝试使用基数。但我仍然得到C3A而不是0C030A。 –

回答

4

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

messageBody += String.format("%02x", Integer.parseInt(temp[i])); 
+0

谢谢先生,它工作正常.. –

+0

请选择他的文章作为答案 –

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(); 
} 

你甚至可以进一步优化本(即使用更少的变量,并进行反复次数比较少),但我认为这是详尽足够现在:)不是线程安全等。

相关问题