`
yaodaqing
  • 浏览: 349497 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

byte--bytes--hex

 
阅读更多
package com.relonger.cclj.weight;

public final class BytesUtils {
	
	/**
	 * 二进制字符串转二进制数组,中间要用逗号隔开
	 * 只能处理无符号的数值
	 * 例如:00111011,01111111都可以处理,如果01111111二进制书中的第一位是1,则会报错
	 * @param b
	 * @return
	 */
	public static byte[] bytesStringToBytes(String b){
		if(b.length()<0){
			return null;
		}
		String[] in = b.split(",");
		byte[] by = new byte[in.length];
		for (int i = 0; i < in.length; i++) {
			by[i] = Byte.parseByte(in[i],2);
		}
		return by;
	}

	/**
	 * 二进制字符串,转十六进制字符串,中间要用逗号隔开
	 * 只能处理无符号的数值
	 * 例如:00111011,01111111都可以处理,如果01111111二进制书中的第一位是1,则会报错
	 */
	public static String bytesStringToHexString(String byteString){
		if(byteString.length()<0){
			return null;
		}
		String[] inputs = byteString.split(",");
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < inputs.length; i++) {
			byte[] b = new byte[1];
			b[0] = Byte.parseByte(inputs[i],2);
			sb.append(BytesUtils.bytesToHexString(b));
		}
		return sb.toString();
	}
	
	/**
	 * 二进制数组转二进制字符串
	 * @param b
	 * @return
	 */
	public static String bytesToBytesString(byte[] b){
		StringBuffer sb = new StringBuffer();
		String s ="";
		for(byte bs:b){  
			String sj = Integer.toBinaryString(bs);
		    s += sj;
		    int i = sj.length();
		    if (i<8) {	//8位不够,前面补零操作
				int in = 8-i;
				s = addZeroHead(s,in);
				sb.append(s);
				s="";
			}
		 }
		return sb.toString();
	}
	
	/**
	 * 前补零操作
	 * 二进制字符串中,不够八位
	 * @return
	 */
	public static String addZeroHead(String src,int addZero){
		String sr = src;
		String s = "";
		for(int f=0;f<addZero;f++){
			s += "0";
		}
		return sr = s+sr;
	}

	/**
		 * 二进制数组转十六进制字符串<br/>
		 * @param b
		 * @return String
		 */
		public static String bytesToHexString(byte[] b){
			if(b==null){
				return null;
			}
	        StringBuffer sb = new StringBuffer();   
	        for (int i = 0; i < b.length; i++) {   
	             String strHex=Integer.toHexString(b[i]);   
	             if(strHex.length() > 3){   
	                    sb.append(strHex.substring(6));   
	             } else {   
	                  if(strHex.length() < 2){   
	                     sb.append("0" + strHex);   
	                  } else {   
	                     sb.append(strHex);   
	                  }   
	             }   
	        }   
	       return  sb.toString();   
	   }

	/**
	 * 二进制字符串,转十六进制字符串
	 * 只能处理无符号的数值
	 * 例如:00111011,01111111都可以处理,如果01111111二进制书中的第一位是1,则会报错
	 */
	public static String hexStringToBytesString(String hexString){
		if(hexString.length()<0){
			return null;
		}
		String[] inputs = hexString.split(",");
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < inputs.length; i++) {
			byte[] b = new byte[1];
			b[0] = Byte.parseByte(inputs[i],2);
			sb.append(BytesUtils.bytesToHexString(b));
		}
		return sb.toString();
	}
	
	/**
	 * 十六进制字符串转二进制数组<br/>
	 * @param s
	 * @return
	 */
	public static byte[] hexStringToBytes(String s){
		if (s == null || s.equals("")) {
			return null;
		}
		s = s.toUpperCase();
		int length = s.length() / 2;
		char[] hexChars = s.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;
	}
	
	/**
	 * 字符转为byte<br/>
	 * 把一个字符转成二进制<br/>
	 * @param c
	 * @return
	 */
	private static byte charToByte(char c) {
		return (byte) "0123456789ABCDEF".indexOf(c);
	}

	
	/**
	 * int to bytes<br/>
	 * 十进制转二进制数组;产生的数据在高<br/>
	 * @param i
	 * @return
	 */
	public static byte[] intToBytes(int i) { 
		byte[] b = new byte[4]; 
		b[0] = (byte) (0xff & i); 
		b[1] = (byte) ((0xff00 & i) >> 8); 
		b[2] = (byte) ((0xff0000 & i) >> 16); 
		b[3] = (byte) ((0xff000000 & i) >> 24); 
		return b; 
	}
	
	/**
	 * bytes to int  ;产生的int数据在高位<br/>
	 * 二进制数组转十进制,数组必须大于4,小于4会出错<br/>
	 * @param b
	 * @return
	 */
	public  static int bytesToInt(byte[] b) { 
		if(b.length<4){
			return 0;
		}
		int n = b[0] & 0xFF; 
		n |= ((b[1] << 8) & 0xFF00); 
		n |= ((b[2] << 16) & 0xFF0000); 
		n |= ((b[3] << 24) & 0xFF000000); 
		return n;
	}
	
	/**  
     * 合并两个byte数组  <br/>
     * @param src  合并在前
     * @param des  合并在后
     * @return  
     */
    public static byte[] getMergeBytes(byte[] src, byte[] des){   
        int ac = src.length;   
        int bc = des.length;   
        byte[] b = new byte[ac + bc];   
        for(int i=0;i<ac;i++){   
            b[i] = src[i];   
        }   
        for(int i=0;i<bc;i++){   
            b[ac + i] = des[i];   
        }   
        return b;
    } 
    
    /**  
     * 合并三个byte数组  <br/>
     * @param src 合并前
     * @param cen 合并中
     * @param des 合并后
     * @return 字节数组
     */
    public static byte[] getMergeBytes(byte[] src, byte[] cen, byte[] des){
    	int ac = src.length;
    	int bc = cen.length;
    	int cc = des.length;
    	byte[] b = new byte[ac + bc + cc];   
        for(int i=0;i<ac;i++){   
            b[i] = src[i];   
        }   
        for(int i=0;i<bc;i++){   
            b[ac + i] = cen[i];   
        }
        for(int i=0;i<cc;i++){   
            b[ac + bc + i] = des[i];   
        }
        return b;
    }
    
    /**
     * 5个byte合并<br/>
     * @param a
     * @param b
     * @param c
     * @param d
     * @param e
     * @return
     */
    public static byte[] getMergeBytesFive(byte[] a, byte[] b , byte[] c , byte[] d , byte[] e){
    	int ia = a.length;
    	int ib = b.length;
    	int ic = c.length;
    	int id = d.length;
    	int ie = e.length;
    	byte[] arrs = new byte[ia+ib+ic];
    	arrs = getMergeBytes(a, b, c);
    	byte[] twoArr = new byte[id+ie];
    	twoArr = getMergeBytes(d, e);
    	byte[] bs = new byte[ia+ib+ic+id+ie];
    	bs = getMergeBytes(arrs, twoArr);
    	return bs;
    }
    
}


分享到:
评论

相关推荐

    hex2byte byte2hex

    ### hex2byte与byte2hex知识点详解 在计算机科学领域,数据经常需要在不同的格式之间进行转换,以适应各种应用场景的需求。例如,在网络通信、文件存储等场景中,经常需要将二进制数据(通常表示为`byte`数组)转换...

    String(含Hex)与Byte数组互相转换[代码]

    在Java或类似的编程语言中,我们经常会遇到需要将字符串(String)与字节数组(Byte[])以及十六进制表示的字符串(Hex)进行相互转换的情况。这些转换在处理网络通信、文件存储、加密解密等领域尤为关键。下面我们...

    电子恒流源通讯协议(WB-2500)new

    - 数据域:m bytes (通常为空) - CRC 校验域:2 bytes #### 2. 读寄存器命令(03hex) 用于读取特定寄存器中的数据值。数据帧格式如下: - 起始符:FE hex - 地址域:n bytes - 功能码:03 hex - 寄存器地址:2 ...

    byte数组转化为hex

    public static String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { // 将字节转换为16进制的两个字符 int halfByte = (b & 0xF0) &gt;&gt; 4; int byteVal = (b & ...

    浮点数转四字节数HexToByte

    浮点数转换为四字节数HexToByte是计算机编程中的一个重要操作,特别是在处理二进制数据、网络传输或存储时。浮点数是一种用于表示数值的格式,它包括正负号、指数和尾数部分,能够精确表示大部分实数。在计算机内部...

    GPRS数据采集模块通讯协议.pdf

    - Byte count:2xN*(Hex),1 Byte。 - Input Registers:N*x2 Bytes。 - Error Check:0000~ffff(Hex),2 Bytes。 - **错误响应命令格式**: - Slave Address:00~ff(Hex),1 Byte。 - Error code:84(Hex),1 ...

    Go-此工具用于将16进制字符串转换成10进制byte数组

    - **使用`hex`包**:Go的标准库`encoding/hex`提供了将16进制字符串解码为字节切片(byte slice)的函数,即`Unhex`。这个函数接收一个16进制字符串,返回对应的byte数组。 - **手动转换**:通过遍历16进制字符串...

    Java中byte[]、String、Hex字符串等转换的方法

    Java中byte[]、String、Hex字符串等转换的方法 Java中byte[]、String、Hex字符串等转换的方法是非常重要的知识点,这些转换方法在实际开发中经常被使用。下面将详细介绍这些转换方法。 byte[]和byte的合并 在Java...

    VB ASP MD5 SHA HMAC AES GZIP BASE64 微信公众号EncodingAESKey 十全大补DLL

    abytData : 字节数组 asp里请加()号 如: bytes="" md5_byte((bytes),0,0) 可选参数 iStart iEnd 默认为0,取整个 bytes的hash值 ---------------------------------------------------- [可选] iStart: 起始位置 ...

    C#_string_byte数组转换解析

    bytes[i / 2] = HexToByte(hex); j = j + 2; } return bytes; } private static byte HexToByte(string hex) { return Convert.ToByte(hex, 16); } ``` 这个函数会去除非16进制字符,并将剩余的16进制字符串...

    C#【文件操作篇】hex文件转bin文件

    byte[] bytes = new byte[hexBytes.Length]; for (int i = 0; i ; i++) { bytes[i] = Convert.ToByte(hexBytes[i], 16); } // 合并字节数组 data = ConcatenateArrays(data, bytes); } // 创建并写入Bin...

    hex2bin_2.2_XiaZaiBa.zip

    -p [value] Pad-byte value in hex (default: ff) -r [start] [end] Range to compute checksum over (default is min and max addresses) -s [address] Starting address in hex for binary file (default: ...

    强大的免费的十六进制编辑器

    XVI32 is a free hex-editor with the following main features: - New: Runs on systems with &gt; 2 GB virtual memory - New: Bugfix (script command CHARCON is now working) - Simplified search for Unicode ...

    Android byte[] 和 String互相转换

    public static String byteToHex(byte[] bytes) { return new String(bytes, StandardCharsets.UTF_8); } ``` ### 二、`String` 转 `byte[]` 将字符串转换为字节数组,可以使用`getBytes()`方法,同样需要指定...

    C#编写的 Hex转string文件 串口下载数据

    byte[] bytes = File.ReadAllBytes(hexFilePath); StringBuilder sb = new StringBuilder(); for (int i = 0; i &lt; bytes.Length; i++) sb.Append(bytes[i].ToString("X2")); return sb.ToString(); } ``` 这个...

    Python3编码问题 Unicode utf-8 bytes互转方法

    为什么需要本文,因为在对接某些很老的接口的时候,需要传递过去的是16进制的hex字符串,并且要求对传的字符串做编码,这里就介绍了utf-8 Unicode bytes 等等。 #英文使用utf-8 转换成16进制hex字符串的方法 newstr...

    VBA API 32 Serialport MT-SICS

    ' number of bytes actually written, except when the file is opened with ' FILE_FLAG_OVERLAPPED. If the file handle was created for overlapped ' input and output (I/O), the application must adjust the ...

    C# string byte数组转换解析.pdf

    bytes[i] = HexToByte(hex); } return bytes; } private static byte HexToByte(string hex) { return Convert.ToByte(hex, 16); } ``` 这些方法在处理字符串与字节数组的转换时非常实用。理解并熟练掌握这些...

    学习文档_JAVA中Integer和Byte转换.doc

    byte[] bytes = hexStringToBytes(hexString); return bytes; } ``` 这里首先将长整型的无符号值转换为16进制字符串,然后将其转换为字节数组。字符串的长度需要补零以确保至少8个字符,对应4字节的无符号整数。 ...

    C#16进制与字符串字节数组之间的转换代码

    byte[] bytes = new byte[hex.Length / 2]; for (int i = 0; i &lt; bytes.Length; i++) { try { bytes[i] = byte.Parse(hex.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber); } catch {...

Global site tag (gtag.js) - Google Analytics