`
assertmyself
  • 浏览: 29562 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

二进制数据转化 (java)

阅读更多
二进制数据转化,提供byte byte[] 等流转化工具类
package com.gbcom.system.utils;

import java.io.UnsupportedEncodingException;

/**
 * 二进制数据转化,提供byte byte[] 等流转化工具类
 * 
 * 
 * <p>
 * @author syz
 * <p>
 * @date 2015-9-15,上午11:48:19
 * <p>
 * @version v1.0.0
 * <p>
 * @see com.gbcom.system.utils.TransformUtil
 */
public class TransformUtil {

	/**
	 * int 转 byte数据
	 * @param num int
	 * @return  byte[]
	 */
    public static byte[] int2byteArray(int num) {
        byte[] result = new byte[4];
        result[0] = (byte) ((num >>> 24) & 0xFF);//取最高8位放到0下标
        result[1] = (byte) ((num >>> 16) & 0xFF);//取次高8为放到1下标
        result[2] = (byte) ((num >>> 8) & 0xFF); //取次低8位放到2下标
        result[3] = (byte) ((num) & 0xFF);      //取最低8位放到3下标
        return result;
    }

    /**
     *  将byte数组bRefArr转为一个整数,字节数组的低位是整型的高字节位
     * @param bRefArr byte[]
     * @return int
     */
    public static int byteArray2Int(byte[] bRefArr) {
        int iOutcome = 0;
        byte bLoop;

        for (int i = 0; i < bRefArr.length; i++) {
            bLoop = bRefArr[i];
            iOutcome += (bLoop & 0xFF) << (8 * (3 - i));
        }
        return iOutcome;
    }

    /**
     * long转byte[]
     * @param num long
     * @return  byte[] 
     */
    public static byte[] long2byteArray(long num) {
        byte[] result = new byte[8];
        result[0] = (byte) ((num >>> 56) & 0xFF);//取最高8位放到0下标
        result[1] = (byte) ((num >>> 48) & 0xFF);//取次高8为放到1下标
        result[2] = (byte) ((num >>> 40) & 0xFF); //取次低8位放到2下标
        result[3] = (byte) ((num >>> 32) & 0xFF); //取最低8位放到3下标
        result[4] = (byte) ((num >>> 24) & 0xFF);//取最高8位放到0下标
        result[5] = (byte) ((num >>> 16) & 0xFF);//取次高8为放到1下标
        result[6] = (byte) ((num >>> 8) & 0xFF); //取次低8位放到2下标
        result[7] = (byte) ((num) & 0xFF);      //取最低8位放到3下标
        return result;
    }

    /**
     *  将byte数组bRefArr转为一个long整数,字节数组的低位是整型的高字节位
     * @param bRefArr byte[] 
     * @return long
     */
    public static long byteArray2Long(byte[] bRefArr) {
        long iOutcome = 0;
        byte bLoop;

        for (int i = 0; i < bRefArr.length; i++) {
            bLoop = bRefArr[i];
            iOutcome += (bLoop & 0xFF) << (8 * (7 - i));
        }
        return iOutcome;
    }

    /**
     * byte数组转short
     * @param bRefArr byte[]
     * @return short
     */
    public static short byteArray2Short(byte[] bRefArr) {
        short iOutcome = 0;
        byte bLoop;

        for (int i = 0; i < bRefArr.length; i++) {
            bLoop = bRefArr[i];
            iOutcome += (bLoop & 0xFF) << (8 * (1 - i));
        }
        return iOutcome;
    }

    /**
     * 根据mac字符串获取字节
     *
     * @param mac mac字符串
     * @return byte[]
     */
    public static byte[] getMacBytes(String mac) {
        byte[] macBytes = new byte[6];
        String[] strArr = mac.split(":");

        for (int i = 0; i < strArr.length; i++) {
            int value = Integer.parseInt(strArr[i], 16);
            macBytes[i] = (byte) value;
        }
        return macBytes;
    }

    /**
     * 根据mac字节获取字符串
     *
     * @param mac mac字节
     * @return String
     */
    public static String getMacString(byte[] mac) {
        String value = "";
        for (int i = 0; i < mac.length; i++) {
            String sTemp = Integer.toHexString(0xFF & mac[i]);
            sTemp = "00".substring(sTemp.length()) + sTemp;
            value = value + sTemp + ":";
        }
        return value.substring(0, value.lastIndexOf(":")).toUpperCase();
    }

    /**
     * 根据mac字节获取字符串
     *
     * @param ip ip字节
     * @return String
     */
    public static String getIpString(byte[] ip) {
        String value = "";
        for (byte b : ip) {
            int b1 = 0xFF & b;
            value += b1 + ".";
        }
        return value.substring(0, value.lastIndexOf("."));
    }

    /**
     * 获取ip 字节数组
     * @param ip String
     * @return byte[]
     */
    public static byte[] getIpBytes(String ip) {

        byte[] ipBytes = new byte[4];
        String[] strArr = ip.split("[.]");

        for (int i = 0; i < strArr.length; i++) {
            int value = Integer.parseInt(strArr[i]);
            ipBytes[i] = (byte) value;
        }
        return ipBytes;
    }

    /**
     * 16进制支付成 转字节数组
     * @param hexString 16进制
     * @return byte[]
     */
    public static byte[] hexStringToBytes(String hexString) {
        byte[] bytes = new byte[hexString.length() / 2];
        int index = 0;
        while (index * 2 < hexString.length()) {
            String hex = hexString.substring(index * 2, index * 2 + 2);
            byte b = (byte) Integer.parseInt(hex, 16);
            bytes[index] = b;
            index++;
        }
        return bytes;
    }

    /**
     * 字节数组转16进制字符串
     * @param src byte[]
     * @return String
     */
    public static String bytesToHexString(byte[] src) {
        StringBuilder stringBuilder = new StringBuilder("");
        if (src == null || src.length <= 0) {
            return null;
        }
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }
    
    /**
     * 字符串转十六进制
     * @param str String
     * @return String
     */
    public static String str2HexString(String str){
        char[] chars = "0123456789ABCDEF".toCharArray(); 
        StringBuilder sb = new StringBuilder("");
        byte[] bs = str.getBytes(); 
        int bit; 
        for (int i = 0; i < bs.length; i++) { 
            bit = (bs[i] & 0x0f0) >> 4; 
            sb.append(chars[bit]); 
            bit = bs[i] & 0x0f; 
            sb.append(chars[bit]); 
        } 
        return sb.toString();  
    }

    /**
     * 16进制 转字符串
     * @param hexStr String
     * @return String
     */
    public static String hexStr2Str(String hexStr) { 

        String str = "0123456789ABCDEF"; 
        char[] hexs = hexStr.toCharArray(); 
        byte[] bytes = new byte[hexStr.length() / 2]; 
        int n; 
        for (int i = 0; i < bytes.length; i++) { 
            n = str.indexOf(hexs[2 * i]) * 16; 
            n += str.indexOf(hexs[2 * i + 1]); 
            bytes[i] = (byte) (n & 0xff); 
        } 
        return new String(bytes); 
    } 
    
    /**
     * 字节数组 转ascii码
     * @param src 字节数组
     * @return String
     */
    public static String bytes2Ascii(byte []src){
    	StringBuffer sb = new StringBuffer();
    	for(byte ea : src){
    		sb.append((char)ea);
    	}
    	
    	return sb.toString();
    }
    
    /**
     * ascii码 转字节数组
     * @param src String
     * @return byte[]
     */
    public static byte[] ascii2bytes(String src){
   	char[] carry = src.toCharArray();
    	byte [] bytes = new byte[carry.length];
    	for(int i=0;i<carry.length;i++){
    		bytes[i] = (byte) carry[i];
    	}
    	return bytes;
    }

    /**
     * test
     * @param args String
     * @throws UnsupportedEncodingException UnsupportedEncodingException
     */
    public static void main(String[] args) throws UnsupportedEncodingException{
    	byte [] src = {0x28,0x51,0x32,0x08,(byte) 0xa5,0x2c};
    	String asc = bytes2Ascii(src);
    	byte[]aaa = ascii2bytes(asc);
    	String hexString  = bytesToHexString(src);
    	System.out.println(getMacString(src));
    	System.out.println(hexString);
    	
    	
    	System.out.println(str2HexString(asc));
    	System.out.println(hexStr2Str(str2HexString(asc)));
    }
}
分享到:
评论

相关推荐

    java 将文件中二进制文件转换成文本文本文件并输出

    此外,如果二进制文件包含图片或其他非文本数据,转换将无意义,因为这些数据无法转化为有意义的ASCII字符。 在给定的"Parse"文件中,可能包含了用于演示这个过程的二进制文件和相应的脚本。通过分析和运行这些文件...

    【博客 Java调用MATLAB,将文件转换为二进制流】java+matlab程序

    4. **处理二进制流**:MATLAB转换后的二进制数据在Java中表现为字节数组,可以进一步处理,比如写入到文件、在网络上传输或者存储到数据库中。Java的`java.io`和`java.nio`包提供了丰富的工具来处理二进制流。 5. *...

    java连接Access2010读取图片二进制

    总结来说,这段Java代码实现了连接到Access 2010数据库,读取其中存储的二进制图片数据,然后将这些数据转换并保存为本地的图片文件。这种方法在处理大量存储在数据库中的图像时非常有用,特别是在数据库集成的系统...

    java十进制转换二进制

    ### Java十进制转换二进制 在计算机科学领域,数据表示和转换是十分重要的基础知识之一。本篇文章将深入解析一个使用Java语言编写的程序,该程序能够将十进制正数和负数转换为二进制形式。通过分析代码逻辑、算法...

    打开二进制的软件 java

    Java作为一种广泛使用的编程语言,同样提供了处理二进制数据的能力。本篇文章将详细探讨如何在Java中打开并操作二进制文件,以及如何将修改后的二进制数据还原成原始文件。 首先,我们需要了解二进制文件。二进制...

    API POST发送数据支持二进制

    常见的编码方式有Base64,它将二进制数据转换为ASCII字符串,便于在网络上传输。另一种方式是直接使用FormData对象,它可以携带二进制数据,并且在HTTP请求中以多部分/表单数据形式发送。 4. **API接口设计**: ...

    二进制数据解码工程.rar_bottlevw8_closelyeuv_二进制数据解码_二进制解码_解码数据文件

    要将二进制数据转化为十进制,可以使用权重方法,即每一位二进制数字乘以2的相应幂次然后求和。例如,二进制的1011转换为十进制就是1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 8 + 0 + 2 + 1 = 11。 解码数据文件的过程通常...

    java二进制运算器(加、见、乘、除)

    这些运算符在处理二进制数据时非常有用。 7. **二进制转换**: 在Java中,我们可以使用Integer.toBinaryString()方法将十进制数转换为二进制字符串,而Integer.parseInt()或Integer.valueOf()可以将二进制字符串转换...

    Java实现的进制转换工具类完整示例

    Java实现的进制转换工具类是Java语言中的一种常用工具类,用于实现各种进制之间的转换操作,如二进制、十六进制、字符串、数组等。该工具类主要提供了将字节数组转换为十六进制字符数组或字符串的方法,以及将字符串...

    java中进制转换(二进制,十进制,十六进制)及字节数组与十六进制的转换

    本篇将详细阐述如何在Java中进行二进制、十进制和十六进制之间的转换,以及字节数组与十六进制字符串的相互转换。 一、进制转换 1. **二进制转十进制**:Java中可以使用`Integer.parseInt()`或`Long.parseLong()`...

    二进制转换base64

    在计算机科学中,二进制转换base64是一种常用的编码方式,用于将二进制数据转换为ASCII码,以便于在网络上传输或存储。base64编码是一种可逆的编码方式,即可以将base64编码的数据恢复为原始的二进制数据。 base64...

    进制数据转换java代码

    二进制字符串转换成十六进制字符串,并返回byte数组 把16进制字符串转换成字节数组 把字节数组转换成16进制字符串 十六进制字符串转二进制字符串 二进制转十进制数 将数字(十进制)串转换为固定位数的二进制字符...

    实现数据库二进制流转换成图片保存本地

    图片文件如JPEG、PNG等,本质上就是一系列二进制数据。当这些图片数据存储在数据库中时,它们会被转化为二进制流,以便于数据库管理系统处理。 实现这个过程通常涉及以下步骤: 1. **连接数据库**:使用合适的...

    将图片转成二进制并生成Base64编码字符串,再将二进制转换成各种图片

    而Base64是一种用于将二进制数据转换为可打印ASCII字符的编码方法,它将每3个字节的二进制数据转换为4个Base64字符,这样可以在文本格式中安全地传输和存储非文本数据,如图片。 在Java编程语言中,我们可以使用...

    netty服务器解析16进制数据

    通过 `ByteBuf` 的方法,如 `readByte()`、`writeByte()`、`readInt()` 和 `writeInt()` 等,可以读取或写入二进制数据,并可以转换为16进制字符串。 3. **16进制字符串到字节的转换** 当接收到16进制字符串时,...

    将图片二进制流存储到数据库中

    当我们谈论将图片的二进制流存储到数据库中时,实际上是指将图片转换为它的原始二进制数据,并将这些数据作为数据库中的一个字段存储。 步骤如下: 1. **读取图片**:这通常通过编程语言中的图像处理库完成,如...

    图片二进制转换,在将二进制转回图片

    图片二进制转换涉及到将图像文件转化为一系列的0和1(二进制数据),然后再将这些二进制数据还原成原来的图像。这个过程对于数据存储、传输以及加密等领域非常有用。下面我们将详细探讨这个过程。 一、图片与二进制...

    Java通过Jacob调用ActiveX,进行二进制数据交换

    对于二进制数据的交换必须使用Variant类型,但是在实际使用过程中使用VC2008ActiveX项目向导生成的ocx触发事件中带有Variant类型的参数时,ocx控件在触发事件消息之后就会出现内存异常,导致程序无法正常运行,而...

    java的二进制操作

    Java的标准库`java.io`提供了丰富的API来支持这些操作,其中`OutputStream`及其子类是进行二进制数据写入的核心。 #### OutputStream与子类详解 1. **OutputStream**: - `OutputStream`是所有字节输出流的超类,...

    pcm音频和二进制进行互转

    然而,计算机只能处理离散的二进制数据,所以需要将模拟信号转换为数字信号。这一过程称为模数转换(Analog-to-Digital Conversion,ADC)。 2. **PCM工作原理**:在模数转换中,PCM首先对模拟音频信号进行采样,...

Global site tag (gtag.js) - Google Analytics