最近在和導航設備的通訊服務,和設備通訊時,需要將字符串以UTF-16編碼傳遞。
那如何將string,轉換為byte[]?其實Java提供了現成的實現:java.lang.string.getbytes();
用法: byte[] b=str.getBytes(charsetName)
string str="南京"; //不設置字節序時候,默認為大端模式 byte[] b=str.getBytes("UTF-16");//結果==0xFE,0xFF,0x53,0x57,0x4E,0xAC //轉為可見字符后發現多出了2個字節,即粗體的兩個字節,其實這兩個字節不是漢字“南京”所對應的,它是getbyts方法在返回結果前加的 //用來標識輸出byte數組字節序的,FEFF為大端,FFFE為小端 //那如何指定轉換后的字節序呢,其實在編碼后面家BE或LE就可以了 byte[] b1_be=str.getBytes("UTF-16BE");//BE為大端,結果==0x53,0x57,0x4E,0xAC byte[] b1_le=str.getBytes("UTF-16LE");//LE小端,結果==0x4E,0xAC,0x53,0x57 //上面示例可見,指定字節序后,getbytes方法返回的內容為4個字節,前綴沒有了字節序標識。
做過通訊的人都知道,有編碼就有解碼,那如何將byte數組按照某編碼方式轉換為字符串呢,也就是getbytes的反向操作呢。
我是這樣做的:做過通訊的人都知道,有編碼就有解碼,那如何將byte數組按照某編碼方式轉換為字符串呢,也就是getbytes的反向操作呢。
我是這樣做的:
//給定字節數組后,需要指定字節序 String productNo = new String(b1_be,"UTF-16BE"); System.out.println(productNo);//==南京