Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 十六进制到Ascii转换_Android_Sockets_Hex_Ascii_Android Bluetooth - Fatal编程技术网

Android 十六进制到Ascii转换

Android 十六进制到Ascii转换,android,sockets,hex,ascii,android-bluetooth,Android,Sockets,Hex,Ascii,Android Bluetooth,我在读取时从蓝牙套接字获得了十六进制(示例:0x61 0x62 0x63) 我想得到它对应的ASCII(示例:abc) 如何进行转换 我试过: String s = "0x56 0x49 0x4e 0x31 0x32 0x33 0x46 0x4f 0x52 0x44 0x54 0x52 0x55 0x43 0x4b 0x00 0x38"; StringBuilder sb = new StringBuilder(s.length() / 2); for (int i =

我在读取时从蓝牙套接字获得了十六进制(
示例:0x61 0x62 0x63

我想得到它对应的ASCII(
示例:abc

如何进行转换

我试过:

String s = "0x56 0x49 0x4e 0x31 0x32 0x33 0x46 0x4f 0x52 
            0x44 0x54 0x52 0x55 0x43 0x4b 0x00 0x38";
StringBuilder sb = new StringBuilder(s.length() / 2);
for (int i = 0; i < s.length(); i+=2) {
    String hex = "" + s.charAt(i) + s.charAt(i+1);
    int ival = Integer.parseInt(hex, 16);
    sb.append((char) ival);
}
String string = sb.toString();
String s=“0x56 0x49 0x4e 0x31 0x32 0x33 0x46 0x4f 0x52
0x44 0x54 0x52 0x55 0x43 0x4b 0x00 0x38”;
StringBuilder sb=新的StringBuilder(s.length()/2);
对于(int i=0;i
类似的方法应该可以:

String s = "0x56 0x49 0x4e 0x31 0x32 0x33 0x46 0x4f 0x52 
        0x44 0x54 0x52 0x55 0x43 0x4b 0x00 0x38";
StringBuilder sb = new StringBuilder();
String[] components = s.split(" ");
for (String component : components) {
    int ival = Integer.parseInt(component.replace("0x", ""), 16);
    sb.append((char) ival);
}
String string = sb.toString();
我的解决方案(已测试):

[编辑]

除掉�� , 只需将
0x00
替换为
0x30

这是“0”的ASCII表示形式

比如:

final String str_in =
    "0x56 0x49 0x4e 0x31 0x32 0x33 0x46 0x4f 0x52 " +
    "0x44 0x54 0x52 0x55 0x43 0x4b 0x00 0x38".replace("0x00", "0x30");

请参阅此SO帖子:不,这不会从十六进制中删除0x,因此不会给出正确的结果。被否决的人应该阅读给出的答案并附上注释,还可以解释被否决的原因,以便我能够理解错误。我要求将
十六进制转换为Ascii
。但是您建议的解决方案提供了从
十六进制到十进制的转换。请更正。对不起,很快就要更改。我将获得
VIN 1 2 3 F R D R U K� � 结果中的8
。但是,它应该是
vin123fordtrack08
。我尝试使用
if(string.contains(“?”)string.replace(“?”,“0”)0x00
替换为
0x30
。这是表示“0”的ASCII码。表示该值+1。我使用了另一种解决方案,在字符之间没有空间。这真的很有用。我要求从
十六进制转换为Ascii
。但是您建议的解决方案提供了从
十六进制到十进制的转换。请更正。不,这不能转换为十进制。无论如何,我现在纠正了一个错误,请再试一次。您的代码运行良好,但我得到了
vin123fordtrack��结果中的8
。但是,它应该是
vin123fordtrack08
。我尝试使用
if(string.contains(“?”)string.replace(“?”,“0”)final String str_in =
    "0x56 0x49 0x4e 0x31 0x32 0x33 0x46 0x4f 0x52 " +
    "0x44 0x54 0x52 0x55 0x43 0x4b 0x00 0x38".replace("0x00", "0x30");