java字節處理的各種工具類


     最近工作壓力頗大,連續加班一個月,讓我這個剛出校園的新人倍感煩惱。有時候真想喊一句“我是自由的”,然后對加班的老板溫柔的說句“拜拜了您”就大步流星的走出公司。不過想象終歸是想象,畢竟還是要生存的,不工作就沒有錢,沒錢就沒吃的穿的,哎。。好在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; } }

 代碼的說明注釋都有了,具體不再闡述,大家可以盡情試用,都是非常好用的哦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM