进制转换的代码详见我的另一篇博客:http://blog.csdn.net/yedajiang44/article/details/79556823
最近项目用到NFC,NFC的标签是嵌在手表上的
需求是这样的:手表显示NFC的TAGID(不是标签的ID,是TAGID),显示的时候是十进制,然后获取到ID后到服务端获取数据
本来这需求挺简单的,而且实现起来也没啥难度
那么我先获取TAGID的数据
// 取出封装在intent中的TAG
Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);//也可使用intent.getByteArrayExtra(NfcAdapter.EXTRA_ID)直接获取TAGID;
byte[] tagbytes = tagFromIntent.getId();
好了!TAGID的字节数据拿到了,那么下面应该是转换进制了,因为手表上显示的十进制
ByteBuffer buffer = ByteBuffer.wrap(tagbytes);
//不足十位数,左补0,这是厂家这么规定的
//"%010d"中0代表前面要补的字符 10代表字符串长度,d表示参数为整数类型
String NFC_ID= String.format("%010d", buffer.getInt());
这时候NFC_ID应该就是手表上显示的十进制数字了,满怀欢喜的run了一下
但是!!!!我这人最怕但是、、、、
显然是跟手表上的不一样,然后我又转成十六进制,又下了个读取NFC标签的应用,
做了下对比,下载的app转换成十六进制的数据跟我转换成十六进制的数据顺序是反过来的
好嘛!这是大小端的问题,这时候只需要在buff.mark();后面加上这行代码
buffer.order(ByteOrder.LITTLE_ENDIAN);// 高字节在高地址, 低字节在低地址
再跑一下,这时候NFC_ID就跟手表上显示的一样了