`

java二进制,字节数组,字符,十六进制,BCD编码转换

阅读更多

java二进制,字节数组,字符,十六进制,BCD编码转换
    * 把16进制字符串转换成字节数组
    * @param hex
    * @return
    */
public static byte[] hexStringToByte(String hex) {
    int len = (hex.length() / 2);
    byte[] result = new byte[len];
    char[] achar = hex.toCharArray();
    for (int i = 0; i < len; i++) {
     int pos = i * 2;
     result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));
    }
    return result;
}

private static byte toByte(char c) {
    byte b = (byte) "0123456789ABCDEF".indexOf(c);
    return b;
}

/** *//**
    * 把字节数组转换成16进制字符串
    * @param bArray
    * @return
    */
public static final String bytesToHexString(byte[] bArray) {
    StringBuffer sb = new StringBuffer(bArray.length);
    String sTemp;
    for (int i = 0; i < bArray.length; i++) {
     sTemp = Integer.toHexString(0xFF & bArray[i]);
     if (sTemp.length() < 2)
      sb.append(0);
     sb.append(sTemp.toUpperCase());
    }
    return sb.toString();
}

/** *//**
    * 把字节数组转换为对象
    * @param bytes
    * @return
    * @throws IOException
    * @throws ClassNotFoundException
    */
public static final Object bytesToObject(byte[] bytes) throws IOException, ClassNotFoundException {
    ByteArrayInputStream in = new ByteArrayInputStream(bytes);
    ObjectInputStream oi = new ObjectInputStream(in);
    Object o = oi.readObject();
    oi.close();
    return o;
}

/** *//**
    * 把可序列化对象转换成字节数组
    * @param s
    * @return
    * @throws IOException
    */
public static final byte[] objectToBytes(Serializable s) throws IOException {
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ObjectOutputStream ot = new ObjectOutputStream(out);
    ot.writeObject(s);
    ot.flush();
    ot.close();
    return out.toByteArray();
}

public static final String objectToHexString(Serializable s) throws IOException{
    return bytesToHexString(objectToBytes(s));
}

public static final Object hexStringToObject(String hex) throws IOException, ClassNotFoundException{
    return bytesToObject(hexStringToByte(hex));
}

/** *//**
    * @函数功能: BCD码转为10进制串(阿拉伯数据)
    * @输入参数: BCD码
    * @输出结果: 10进制串
    */
public static String bcd2Str(byte[] bytes){
    StringBuffer temp=new StringBuffer(bytes.length*2);

    for(int i=0;i<bytes.length;i++){
     temp.append((byte)((bytes[i]& 0xf0)>>>4));
     temp.append((byte)(bytes[i]& 0x0f));
    }
    return temp.toString().substring(0,1).equalsIgnoreCase("0")?temp.toString().substring(1):temp.toString();
}

/** *//**
    * @函数功能: 10进制串转为BCD码
    * @输入参数: 10进制串
    * @输出结果: BCD码
    */
public static byte[] str2Bcd(String asc) {
    int len = asc.length();
    int mod = len % 2;

    if (mod != 0) {
     asc = "0" + asc;
     len = asc.length();
    }

    byte abt[] = new byte[len];
    if (len >= 2) {
     len = len / 2;
    }

    byte bbt[] = new byte[len];
    abt = asc.getBytes();
    int j, k;

    for (int p = 0; p < asc.length()/2; p++) {
     if ( (abt[2 * p] >= '0') && (abt[2 * p] <= '9')) {
      j = abt[2 * p] - '0';
     } else if ( (abt[2 * p] >= 'a') && (abt[2 * p] <= 'z')) {
      j = abt[2 * p] - 'a' + 0x0a;
     } else {
      j = abt[2 * p] - 'A' + 0x0a;
     }

     if ( (abt[2 * p + 1] >= '0') && (abt[2 * p + 1] <= '9')) {
      k = abt[2 * p + 1] - '0';
     } else if ( (abt[2 * p + 1] >= 'a') && (abt[2 * p + 1] <= 'z')) {
      k = abt[2 * p + 1] - 'a' + 0x0a;
     }else {
      k = abt[2 * p + 1] - 'A' + 0x0a;
     }

     int a = (j << 4) + k;
     byte b = (byte) a;
     bbt[p] = b;
    }
    return bbt;
}
/** *//**
    * @函数功能: BCD码转ASC码
    * @输入参数: BCD串
    * @输出结果: ASC码
    */
public static String BCD2ASC(byte[] bytes) {
    StringBuffer temp = new StringBuffer(bytes.length * 2);

    for (int i = 0; i < bytes.length; i++) {
     int h = ((bytes[i] & 0xf0) >>> 4);
     int l = (bytes[i] & 0x0f);  
     temp.append(BToA[h]).append( BToA[l]);
    }
    return temp.toString() ;
}

/** *//**
    * MD5加密字符串,返回加密后的16进制字符串
    * @param origin
    * @return
    */
public static String MD5EncodeToHex(String origin) {
       return bytesToHexString(MD5Encode(origin));
     }

/** *//**
    * MD5加密字符串,返回加密后的字节数组
    * @param origin
    * @return
    */
public static byte[] MD5Encode(String origin){
    return MD5Encode(origin.getBytes());
}

/** *//**
    * MD5加密字节数组,返回加密后的字节数组
    * @param bytes
    * @return
    */
public static byte[] MD5Encode(byte[] bytes){
    MessageDigest md=null;
    try {
     md = MessageDigest.getInstance("MD5");
     return md.digest(bytes);
    } catch (NoSuchAlgorithmException e) {
     e.printStackTrace();
     return new byte[0];
    }

}
//关于byte:    signed byte 把 0x00 ~ 0xff 映射成范围 0~127和 -128~-1    两段,比较简单的办法用 (b+256)%256的办法令其值回到0~255,或者用&0xff并赋给一个int。

分享到:
评论

相关推荐

    JAVA二进制字节数组字符十六进制BCD编码转换.doc

    在Java编程中,二进制、字节数组、字符、十六进制和BCD(Binary-Coded Decimal,二进制编码的十进制)编码转换是常见的数据处理任务。以下将详细介绍这些概念以及如何在Java中进行相关操作。 1. **二进制与十六进制...

    hex_bcd.rar_hex_bcd_字节转换_进制转换

    转换过程分为两步:首先,将3字节的十六进制数转换为24位的二进制数;然后,将24位的二进制数转换为8421BCD码。 步骤1:十六进制转二进制 每个十六进制数字转换为4位二进制,例如: - 十六进制的'1'转换为二进制'...

    java中BCD编码

    - `toHexString()`:将BCD编码的字节数组转换为十六进制字符串,便于查看和调试。 - `fromHexString(String hex)`:将十六进制字符串解析为BCD编码的字节数组。 在实际开发中,BCD编码常用于金融系统,如银行、支付...

    代码转换.zip

    每个十进制数字被编码为四位二进制数,其中双字节BCD码由两个这样的四位二进制数字组成,能表示0到99的十进制数。这种编码方式常用于财务计算、电子表单和数字显示设备,因为它可以精确地保持十进制精度,避免了浮点...

    Android BCD和String的转换

    在Android开发中,有时我们需要处理二进制数据,特别是当涉及到通信协议或者存储紧凑型数据时,BCD(Binary-Coded Decimal,二进制编码的十进制)码是一种常用的表示方式。BCD码是一种将十进制数字用二进制形式表示...

    西门子WORD转二进制点位分析图解

    西门子WORD转二进制点位分析图解

    微机上机实验报告(广工实验报告+截图)

    本实验的目标是将存储在特定内存地址处的四个非压缩BCD数转换为二进制数码,并用十六进制数表示。 **具体要求**: - 输入:四个非压缩BCD数存储在0500H至0507H的内存单元中。 - 输出:将转换后的二进制数码(十六...

    《二进制补充自学》PPT课件.ppt

    - **字符编码**:ASCII编码用于表示英文字符,汉字编码(如GBK、Unicode)用于表示中文字符,BCD码(二进制编码的十进制)则用于高效地存储和处理十进制数字。 4. **不同进制的表示和换算**: - **二进制**、**十...

    bcd码变成16进制

    在单片机编程中,有时我们需要将BCD(Binary Coded Decimal,二进制编码的十进制)码转换为16进制数,以便进行更高效的数据处理或通信。AT89C51是一款经典的8位单片机,常用于嵌入式系统设计,它支持汇编语言编程。...

    org.apache.commons.codec-1.8

    `Base64.encodeBytes()`方法用于将字节数组编码为Base64字符串,而`Base64.decodeBase64()`则用于将Base64字符串解码回原始字节数组。 2. **URL编码和解码**: - `UrlCodec`类处理URL编码和解码。URL中可能包含非...

    VMS中解协议常用方法备忘(小结)

    1、由ASICC编码的字符串转换为十六进制byte数组 2、将指定字节数组中的一个字节序列解码为一个字符串 3、将二进制字符串转化为byte类型 4、将SIM卡号转化为byte数组 5、将BCD[6]转换为12位数字字符串 6、关于IP...

    汇编语言第二版-郑晓薇-习题答案

    **1.8 将下列十进制数分别转换为二进制、十六进制、二进制补码、压缩 BCD 码和 ASCII 码** - **108** - 二进制:01101100 - 十六进制:6CH - 二进制补码:01101100 - 压缩 BCD 码:01010100 - ASCII 码:d ...

    易语言BCD码大小写源码

    本资源提供的是易语言关于BCD码(Binary-Coded Decimal,二进制编码的十进制数)处理大小写的源码,这对于编写处理数字格式和字符串格式转换的程序来说是非常重要的。 BCD码是一种将十进制数字编码为二进制形式的...

    计算机基础习题集.doc

    9. **BCD码**:二进制编码的十进制码(BCD)是一种特殊编码,用于表示十进制数字。 10. **ASCII码**:ASCII码是7位二进制编码,用于表示128个不同的字符。 11. **十六进制与八进制转换**:十六进制数7A转换为八...

    CNV.rar_Enjoy_To Ascii_ascii to hex_from hex_hex

    "CNV.rar_Enjoy_To Ascii_ascii to hex_from hex_hex"这个压缩包文件的主题聚焦于ASCII与十六进制(Hex)之间的转换,以及可能涉及的其他相关转换,如十六进制到BCD(二进制编码的十进制)。让我们深入探讨这些概念...

    数码转换实验报告

    本实验报告主要关注三种类型的数码转换:ASCⅡ码转换为非压缩型BCD码、BCD码转换为二进制数以及十六进制数转换为ASCⅡ码。这些转换在计算机系统内部进行数据处理和表示时是至关重要的。 实验的目的旨在让学生掌握...

    编码的奥秘-15作者 Charles Petzolel

    - **BCD格式存储:** IBM选择8位字节的原因之一是它们易于以BCD(Binary-Coded Decimal)格式存储,这是一种将十进制数以二进制形式编码的方法。 - **文本表示:** 字节非常适合表示大多数书写语言的字符集,因为...

    单片机实验上机--实验三 二进制ASCII码转换.doc

    实验三“二进制ASCII码转换”是单片机学习中的一个重要实践环节,旨在帮助学生理解和掌握数值在BCD码和ASCII码之间的转换方法。在这个实验中,主要的知识点包括: 1. **BCD码(Binary-Coded Decimal)**:BCD码是一...

Global site tag (gtag.js) - Google Analytics