Java字符串十六进制到int

时间:2013-02-16 05:09:51

标签: java string int hex

我想将下面的String hex转换为Int(16)。

a6 5f de 57

我做了什么,但我不知道这是正确的方法,我无法验证号码是否正确。

byte[] rec = new byte[20];                  
DatagramPacket pRec = new DatagramPacket(rec, rec.length);
socket.receive(pRec);

String tData = "";
for(int i = 0; i < 20; i++){
   tData += String.format("%02x", rec[i]);
}

数据包的输出:

  

ffffffff730aa65fde5700000000000000000000

现在我必须跳过前6个字节[ffffffff730a],我需要剩下的4个字节[a65fde57]。注意:[00000000000000000000]因为缓冲区的长度而为NULL。

System.out.println( hexToInt(tData, 6, 10) );

private Integer hexToInt(String str, int start, int end){
   String t = str.substring(start, end);

   char[] ch = t.toCharArray();
   String res = "";
   for(int i = 0; i < end-start; i += 2){
      res += Integer.parseInt(ch[i]+ch[i+1]+"", 16);
   }

   return Integer.parseInt(res);
}

结果是:

  

516262

这是将十六进制字符串转换为int的正确方法吗?结果是否正确?

4 个答案:

答案 0 :(得分:2)

最简单的方法是使用类似int i = Integer.parseInt(...)的东西。见Integer.parseInt(java.lang.String, int)

答案 1 :(得分:1)

我个人会走这条路:

private int hexToInt(String str, int start, int end) {
    String t = str.substring(start, end);

    byte[] bytes = new byte[4];
    int i,j = 0
    while (i < 8)
    {
        bytes[j] = Byte.valueOf(t.substring(i,i+1), 16);
        i+=2; 
        j++;
    }

    ByteBuffer bb = ByteBuffer.wrap(bytes);
    // That's big-endian. If you want little endian ...
    bb.order(ByteOrder.LITTLE_ENDIAN);
    return bb.getInt();
}

你当然可以通过传入包含你要转换的8个字符的子字符串来减少一个级别。

答案 2 :(得分:1)

不,这不是正确的方法,这不是正确的答案。你正在做的是将字节转换为值,但将它们转换回十进制值字符串,并将它们连接在一起。然后在最后转换回数字格式。不要来回转换太多,将一次转换为数字并保持在那里。像这样:

private Integer hexToInt(String str, int start, int end){
    long res = 0;
    for(int i = start; i < end; i++){
        res = res*16  + Integer.parseInt(str.substring(i,i+1), 16);
    }
    return res;
}

答案 3 :(得分:0)

private int convertHexStringToInt(String hexStr)
{
   int iValue= Integer.parseInt(hexStr,16); //base 16 for converting hexadecimal string

   return iValue;
}

请记住,如果十六进制字符串格式的前缀为“0x”,如“0xc38”,那么请从该十六进制字符串中删除0x。(我建议这样做以避免NumberFormatException)

您可以使用以下代码执行此操作

String arrHexStr[] = hexStr.split("x");

if(arrHexStr.length==2)
hexStr = arrHexStr[1]; // this will assign the "c38" value with removed "0x" characters

所以最终的功能看起来像这样

private int convertHexStringToInt(String hexStr)
{
   String arrHexStr[] = hexStr.split("x");

   if(arrHexStr.length==2)
      hexStr = arrHexStr[1]; // this will assign the correct hex string "c38" value with removed prefixes like "0x" 

   int iValue= Integer.parseInt(hexStr,16); //base 16 for converting hexadecimal string

   return iValue;
}