项目需求:和蓝牙设备通信。
由于之前没有搞过这方面的功能,所以很是被动;中间经过各种的查资料,问蓝牙设备开发人员等等等等,终于把接受数据的功能实现了;但是给蓝牙发送数据的地方却卡主了。由于蓝牙设备开发人员在接收到的数据的地方进行了样式规范,所以才有了标题的需求:如何获取一个数的反码。
蓝牙需要接受一个数的十六进制以及这个数的十六进制反码,我的实现方法是:先把这个数转换成十六进制,这样就实现了第一个要求;在获取反码的地方出了点问题,我之前那的理解是反码就是这个数的二进制中0变成1,1变成0的这种。后面发现并不对,正常情况下应该是这个数转成十六进制之后的数的反码。写到这里主要的功能是已经实现了
但是在这里说一个方便的方法,该方法只在十六进制中试验过,不过个人感觉在其他进制中应该也是适用的:原始数的十六进制+反码是刚好等于15的。举例说明一下:原始数是82,那么他的十六进制就是52,而反码应该是AD。重点来了:5+A = 15 2+D=15 按照这种方法取反码就简单的多了吧
在这里贴上获取反码的方法:
//获取十六进制反码 public static String getComplement(String txt) { String i; boolean isNumber = getIsNumber(txt); int a; if (isNumber) { a = 15 - Integer.parseInt(txt); }else{ a = 15 - formatting(txt); } if (a == 10) { i = "A"; } else if (a == 11) { i = "B"; } else if (a == 12) { i = "C"; } else if (a == 13) { i = "D"; } else if (a == 14) { i = "E"; } else if (a == 15) { i = "F"; } else { i = a + ""; } return i; }可能还有不足之处,希望大家指教,相互学习!