JHex二進制數(shù)據(jù)處理和基本數(shù)據(jù)類型轉(zhuǎn)換工具類
JHex工具類
簡介
Java不是一個完全面向?qū)ο蟮木幊陶Z言,因為其有基本數(shù)據(jù)類型的存在,在Java中所有的數(shù)值類的基本數(shù)據(jù)類型都是有符號數(shù),而在嵌入式系統(tǒng)常用的C語言編程的數(shù)據(jù)則分為有符號和無符號兩種類型,通常用于數(shù)據(jù)通訊與數(shù)據(jù)交互的都是無符號類型,尤其是使用SerialPort或者LibUSB這種接口與PC進行數(shù)據(jù)傳輸時尤為明顯。
以SerialPort為例,通常嵌入式編程中使用8bit數(shù)據(jù)位為一幀的方式傳送數(shù)據(jù),通常為無符號數(shù),比如一個float類型占4個字節(jié),通常需要接受4幀才能恢復(fù)出一個float類型的數(shù)據(jù),Java在這方面就顯得有些力不從心了,雖然有DataInputStream這種類或者某些包裝類的方法可以解決這個問題,但通常要么就是花費比較大的資源要么要么就是功能不夠全面并且現(xiàn)在很多JDK里的數(shù)據(jù)轉(zhuǎn)化存在BUG,比如Integer.parseInt(num,radix)這種方法如果你粘貼進去負數(shù)的二進制進去,那么就會產(chǎn)生異常了。
使用JHex工具類可以解決這些問題,比如你可以輕松的使用toFloat(byte[] arr)這種函數(shù)把4幀byte數(shù)據(jù)轉(zhuǎn)化成一個float類型,你可以使用getBitValue(int number,int bitAt)函數(shù)獲取數(shù)值在某一個二進制位上的值等等 ,或者使用toByteArray(int number)將一個整型數(shù)轉(zhuǎn)化成4幀byte數(shù)組并后續(xù)通過串口發(fā)送出去。
現(xiàn)版本的主要功能
1. 將整形、浮點型等多字節(jié)數(shù)據(jù)轉(zhuǎn)化成byte類型數(shù)組。
2. 逆向變換將byte數(shù)組轉(zhuǎn)化成相應(yīng)的整形或者浮點型數(shù)據(jù)。
3. 將任意數(shù)轉(zhuǎn)化成二進制或者十六進制的字符串。
4. 位運算,提取某些位的值或者改變某些位的值得到新值。
5. 任意進制字符串之間的轉(zhuǎn)化。
6. 有符號和無符號數(shù)之間的轉(zhuǎn)化。
代碼樣例
/*
* 將一個整型數(shù)轉(zhuǎn)化成4字節(jié)的byte數(shù)組
*/
public static byte[] toByteArray(int number) {
byte[] bytes = new byte[4];
for (int i = 0; i < 4; i++) {
bytes[i] = (byte) (number >>> (24 - i * 8));
}
return bytes;
}
使用范例
@Test
public void test() {
int number = 1024;
byte[] byteArray = JHex.toByteArray(number);
System.out.println(Arrays.toString(byteArray));
}
輸出結(jié)果:

