最近工作壓力頗大,連續加班一個月,讓我這個剛出校園的新人倍感煩惱。有時候真想喊一句“我是自由的”,然后對加班的老板溫柔的說句“拜拜了您”就大步流星的走出公司。不過想象終歸是想象,畢竟還是要生存的,不工作就沒有錢,沒錢就沒吃的穿的,哎。。好在boss也是個高等知識分子,容易在每天不斷的思考中自我反省然后找出問題的所在。這周開了個會議讓大家發表對她的看法,大家委婉的道出了對加班的不滿,結果現在boss已經能夠做到到點自己先走,但我們卻儼然被培養成了加班的習慣,欲哭無淚啊。
話說我自己其實不該有這么多的抱怨,因為這段時間雖是苦了點,但個人的成長速度也驚人,先是掌握了前端的各種知識,可以做出一些閃亮的前端特效,以及超級神奇的可以隨意改動大家們做的東西的代碼(這里是指前端的東西)去實現自己想要的效果,不禁有點小小竊喜。要知道人一旦擁有了較強的自我學習能力,那么他的進步會是很強大的。之后又趁勢幫助一位研究生的同學搞定了單通道圖片的合成問題,完善了與硬件交互的通訊代碼(使用java udp 的方法,這種不可靠交付的協議還是需要仔細的去分析收集到的數據),最近又華麗麗的完成了對指紋儀的相關操作,那個成就感大家搞技術的都懂的。好了不多說了貼代碼,以下的代碼是自己最近一段時間能整理和書寫的使用java與硬件交互必用的字節處理方法。
import java.util.ArrayList; import java.util.List; /** * 字節處理的工具類 * @author wq * */ public class ByteDisposeUtil { /** * 將字符創轉化為字節數組(只適合16進制) * @param zhiling * @return */ public static byte[] conversionStringToBytes(String zhiling){ List<byte[]> bytes = new ArrayList<byte[]>(); for(int i=0;i<zhiling.length();i+=2){ String hex=zhiling.substring(i,i+2); byte[] bnew= hexStringToBytes(hex); bytes.add(bnew); } byte[] newByte = sysCopy(bytes); return newByte; } /** * 把data中從off開始的 length個字符轉換成十六進制 * @param data * @param off * @param length * @return */ public static final StringBuffer toHex(byte[] data, int off, int length) { StringBuffer buf = new StringBuffer(data.length * 2); for (int i = off; i < length; i++) { if (((int) data[i] & 0xff) < 0x10) { buf.append("0"); } buf.append(Long.toString((int) data[i] & 0xff, 16)); } return buf; } /** * 字符轉化為字節(將10進制轉化為16進制后再變為字節) * @param c * @return */ public static byte charToByte(char c) { return (byte) "0123456789ABCDEF".indexOf(c); } /** * 十六進制轉化為字節 * @param hexString * @return */ public static byte[] hexStringToBytes(String hexString) { if (hexString == null || hexString.equals("")) { return null; } hexString = hexString.toUpperCase(); int length = hexString.length() / 2; char[] hexChars = hexString.toCharArray(); byte[] d = new byte[length]; for (int i = 0; i < length; i++) { int pos = i * 2; d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); } return d; } /** * 合並數組 * @param srcArrays * @return */ public static byte[] sysCopy(List<byte[]> srcArrays) { int len = 0; for (byte[] srcArray:srcArrays) { len+= srcArray.length; } byte[] destArray = new byte[len]; int destLen = 0; for (byte[] srcArray:srcArrays) { System.arraycopy(srcArray, 0, destArray, destLen, srcArray.length); destLen += srcArray.length; } return destArray; } /** * 將一個int數據轉為按小端順序排列的字節數組 * @param data int數據 * @return 按小端順序排列的字節數組 */ public static byte[] changeByte(int data){ byte b4 = (byte)((data)>>24); byte b3 = (byte)(((data)<<8)>>24); byte b2= (byte)(((data)<<16)>>24); byte b1 = (byte)(((data)<<24)>>24); byte[] bytes = {b1,b2,b3,b4}; return bytes; } /** * 十進制轉化為十六進制 * */ public static String dtoh(int a){ String bb=""; while((a/16)!=0){ int b=a%16; String s=""+b; if(b==10){ s="A"; } if(b==11){ s="B"; } if(b==12){ s="C"; } if(b==13){ s="D"; } if(b==14){ s="E"; } if(b==15){ s="F"; } a=a/16; bb+=s; } int k=a%16;
if(k>=10){
if(k==10){
bb+="A";
}
if(k==11){
bb+="B";
}
if(k==12){
bb+="C";
}
if(k==13){
bb+="D";
}
if(k==14){
bb+="E";
}
if(k==15){
bb+="F";
}
}
else{
bb+=k;
}
String result=new StringBuffer(bb).reverse().toString(); int length=result.length(); for(int j=0;j<4-length;j++){ result="0"+result; } return result; } /** * 16進制轉10進制(8位) */ public static String htod(String a){ StringBuffer icid=new StringBuffer(a); String fanzhuan=icid.reverse().toString().toUpperCase(); int zhengshuka=0; for(int i=0;i<fanzhuan.length();i++){ int num="0123456789ABCDEF".indexOf(fanzhuan.charAt(i)); zhengshuka+=(num*Math.pow(16,i)); } String zhengshu=""+zhengshuka; for(int j=0;j<8-(zhengshuka+"").length();j++){ zhengshu=("0"+zhengshu); } return zhengshu; } }
代碼的說明注釋都有了,具體不再闡述,大家可以盡情試用,都是非常好用的哦。
