0

以下の 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]);
}

パケットからの出力:

ffffffff730aa65fde570000000000000000000

そして今、最初の 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

これは、16 進文字列を int に変換する正しい方法ですか? 結果は正しいですか?

4

4 に答える 4

2

最も簡単なのは、int i = Integer.parseInt(...) のようなものを使用することです。Integer.parseInt(java.lang.String, int)を参照してください

于 2013-02-16T05:20:56.757 に答える
1

いいえ、それは正しい方法ではありません、そしてそれは正しい答えではありません。あなたがしているのは、バイトを値に変換しますが、それらを10進値の文字列に変換し直し、それらを連結します。次に、最後に数値形式に変換し直します。あまり前後に変換しないでください。一度数値に変換して、そのままにしておきます。このようなもの:

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;
}
于 2013-02-16T08:16:24.280 に答える
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 文字を含む部分文字列を渡すだけで、これを 1 レベル下げることができます。

于 2013-02-16T05:35:11.180 に答える
0
private int convertHexStringToInt(String hexStr)
{
   int iValue= Integer.parseInt(hexStr,16); //base 16 for converting hexadecimal string

   return iValue;
}

16 進文字列フォーマットが「0xc38」のように「0x」で始まる場合は、その 16 進文字列から 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;
}
于 2014-05-02T14:15:47.120 に答える