我想将下面的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的正确方法吗?结果是否正确?
答案 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;
}