前言
最近在写Java蓝牙串口通信读取数据中,需要将读取到的十六进制数转换为16位的有符号整数,网上Google一大堆,均无果,最后在StackOverFlow上找到了答案。
问题描述
通信协议上指出需要需要解析出三个16位的int型数据,每个数据2个字节,即2个byte。
温习一下java数据类型基础知识: byte型占1个字节,int型占4个字节,在java中没有无符号的数据类型。
下面是官方给的C#示例程序代码:
虽然没学过C#,但还是可以看出处理过程:
首先从原始数据byteTemp取出有用的部分复制到raw字节数组中,也就是raw中存放需要处理的两个字节,再调用自带的数组转置函数倒转一下顺序(应该是通信协议的要求),最后关键的一步调用BitConverter.ToInt16将2个字节转成一个16位的有符号整型数据。可见C#的各种小工具类还是挺全的,唉,此处不忍心要吐槽java了…
那么问题来了,如何将2个字节的字节数组转换成有符号的整型数据呢?也就是C#自带的API: BitConverter.ToInt16(byte[] src, int startIndex)在java中应该如何手动实现呢?
查看MSDN
打开微软的官方API文档想一探究竟,结果被吓得怀疑人生了,怀疑自己到底有没有学过计算机…这究竟怎么转的啊…怎么0F00就是15,F1FF就变成-15呢,郁闷…
Google搜索
- Java 中int与byte数组转换详解 http://my.oschina.net/u/169390/blog/97495
- Java 中 byte、byte 数组和 int、long 之间的转换
http://blog.csdn.net/defonds/article/details/8782785- java中byte, int的转换
http://freewind886.blog.163.com/blog/static/661924642011810236100/
无奈,先查阅各种资料,补充了点基础知识ÿ