我在Android上运行了一个TCP客户端。服务器是OBD2加密狗。 我得到一个保存在String中的InputStream,但它是一个十六进制数。
TCP服务器的响应如下:FD A8 F1 FF 1F D0 03 20 它是一个8字节长的十六进制数,但我将它作为字符串发送,所以我需要将其转换为十六进制。
我该怎么做?
编辑:
Parse error: syntax error, unexpected T_FUNCTION in /my/root/path/init on line 70
这正是我在screnn& FD A8 F1 FF 1F D0 03 20'包括之间的空格。
答案 0 :(得分:0)
试试这个: Integer.toHexString(的Integer.parseInt(字符串));
答案 1 :(得分:0)
尝试以下代码即可。控制台中打印的值为十六进制格式。如果您想稍后使用它,请存储它。
public static void stringToHex(){
String hexStr = "FD A8 F1 FF 1F D0 03 20";
char[] chars = hexStr.toCharArray();
StringBuffer hex = new StringBuffer();
hex = new StringBuffer("0x");
int i =0;
while(i<chars.length){
if(chars[i]==' '){
i++;
//you can store this value if you want
System.out.println(hex.toString());
hex = new StringBuffer("0x");
continue;
}
hex.append(chars[i]);
i++;
}
}
根据要求实施更短:
String hexStr = "FD A8 F1 FF 1F D0 03 20";
String[] hexStrs = hexStr.split(" ");
DecimalFormat df = new DecimalFormat("#.00");
Double[] values = new Double[hexStrs.length];
for(int i=0; i<hexStrs.length; i++){
values[i] = Double.valueOf(df.format(Integer.valueOf(hexStrs[i], 16)*0.04));
System.out.println(values[i]);
}
答案 2 :(得分:0)
十六进制表示中的值是否表示单个值?如果是这样的话:
String hexStr = "FD A8 F1 FF 1F D0 03 20";
String hexNoSpace = hexStr.Replace(" ", string.Empty);
long valAsLong = long.Parse(hexNoSpace, NumberStyles.AllowHexSpecifier);
ulong valAsUnsignedLong = ulong.Parse(hexNoSpace, NumberStyles.AllowHexSpecifier);
结果:
长:-168618907973713120
as ulong:18278125165735838496