android java 串口16进制接收 tohex,java八进制、十进制、十六进制(hex)ASCII码字符串和String互转...

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

笔者在做Android串口开发的时候,与串口设备间的通信经常内容都是16进制的

发送命令的时候需要先把命令转成16进制的ASCII字符串。

接收到设备的反馈时需要把16进制的ASCII字符串转成对应的明文。

比如我们要发送的明文为ABCDEF,需要先转成对应的16进制ASCII码字符串414243444546

比如我们收到的反馈为16进制的ASCII码字符串313233343536,需要转成对应的明文123456

16进制ASCII码和单个字符char的互转

我们先来了解单个字符char和ASCII码的互转1

2

3

4

5

6

7

8

9

10

11

12// 先将hex字符串转成int

int i = Integer.parseInt("46", 16);

// hex转char方法一,结果为F

String str1 = new String(new char[]{(char)i});

// hex转char方法二,结果为F

String str2 = new StringBuffer().append((char)i).toString();

// char转hex方法一,结果为46(第二个参数16表16进制)

String hex1 = Integer.toString(c, 16);

// char转hex方法二,结果为46

String hex2 = Integer.toHexString('F');

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

ASCII码hex字符串转String明文

代码很简单,就是每两个字符表示的16进制ASCII码解析成一个明文字符1

2

3

4

5

6

7

8

9

10

11

12public static String (String hex){

StringBuilder sb = new StringBuilder();

for (int i = 0; i < hex.length() - 1; i += 2) {

String h = hex.substring(i, (i + 2));

int decimal = Integer.parseInt(h, 16);

sb.append((char) decimal);

}

return sb.toString();

}

// 输出结果为ABCDEF

System.out.println(hex2Str("414243444546"));

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

String明文转ASCII码hex字符串

代码很简单,就是一个明文字符生成两个字符表示的16进制ASCII码1

2

3

4

5

6

7

8

9

10

11

12

13

14public static String str2Hex(String str){

StringBuilder sb = new StringBuilder();

for (int i = 0; i < str.length(); i++) {

char c = str.charAt(i);

// 这里的第二个参数16表示十六进制

sb.append(Integer.toString(c, 16));

// 或用toHexString方法直接转成16进制

// sb.append(Integer.toHexString(c));

}

return sb.toString();

}

// 输出结果为414243444546

System.out.println(str2Hex("ABCDEF"));

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

十进制ASCII码字符串和String明文互转

10进制的转换和16进制的类似,只有细微的差别,直接看代码

10进制ASCII转String1

2

3

4

5

6

7

8

9

10

11

12

13public static String dec2Str(String ascii){

StringBuilder sb = new StringBuilder();

for (int i = 0; i < ascii.length() - 1; i += 2) {

String h = ascii.substring(i, (i + 2));

// 这里第二个参数传10表10进制

int decimal = Integer.parseInt(h, 10);

sb.append((char) decimal);

}

return sb.toString();

}

// 结果为ABCDEF

System.out.println(dec2Str("656667686970"));

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

String转10进制ASCII1

2

3

4

5

6

7

8

9

10

11

12

13

14public static String str2Dec(String str){

StringBuilder sb = new StringBuilder();

for (int i = 0; i < str.length(); i++) {

char c = str.charAt(i);

// 第二个参数10表示10进制

sb.append(Integer.toString(c, 10));

// 或者省略第二个参数,默认为10进制

// sb.append(Integer.toString(c));

}

return sb.toString();

}

// 结果为656667686970

System.out.println(str2Dec("ABCDEF"));

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

八进制ASCII码字符串和String明文互转

八进制ASCII码的转换也类似,主要要注意的地方是八进制的ASCII码占三位,而16进制和十进制表示法只占两位

8进制ASCII转String1

2

3

4

5

6

7

8

9

10

11

12

13

14public static String oct2Str(String ascii){

StringBuilder sb = new StringBuilder();

// 这里这里循环的步进为3,因为8进制的ASCII码占3位

for (int i = 0; i < ascii.length() - 2; i += 3) {

String h = ascii.substring(i, (i + 3));

// 第二个参数8表8进制

int decimal = Integer.parseInt(h, 8);

sb.append((char) decimal);

}

return sb.toString();

}

// 结果为ABCDEF

System.out.println(oct2Str("101102103104105106"));

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

String转8进制ASCII1

2

3

4

5

6

7

8

9

10

11

12

13

14public static String str2Oct(String str){

StringBuilder sb = new StringBuilder();

for (int i = 0; i < str.length(); i++) {

char c = str.charAt(i);

// 这里的第二个参数8表8进制

sb.append(Integer.toString(c, 8));

// 或者直接用toOctalString方法转8进制

// sb.append(Integer.toOctalString(c));

}

return sb.toString();

}

// 结果为101102103104105106

System.out.println(str2Oct("ABCDEF"));

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值