`

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编码转换

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

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

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

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

    计算机组成原理与汇编语言程序设计课后习题及解答(详解).doc

    将十进制数(75.34)10转换为8位二进制数及八进制数、十六进制数。 解: (75.34)10 = (01001011.01010111)2 =(213.256)8 =(4B.57)16 5.将十进制数13/128转换为二进制数. 解: (13/128)10 =(1101/10000000)2 =(0.0001101)...

    8583报文解析框架Simple8583.zip

    BINARY(二进制编码,在打包时将8位01值组装为一个字节), NUMERIC(BCD编码,即8421码), LLVAR(变长域,采用ASC编码,每个LLVAR类型的域前会有1字节的域字节长度,表示长度...

    计算机应用基础试题及答案.doc

    2、在微型计算机中,应用最普遍的字符编码是 A) ASCII码 B)BCD码 C)汉字编码 D)补码 3、计算机病毒可以使整个计算机瘫痪,危害极大。计算机病毒是 A) 一条命令 B)一段特殊的程序 C)一种生物病毒 D)一种芯片 4...

    (完整版)计算机应用基础试题及答案.doc

    2、在微型计算机中,应用最普遍的字符编码是 A) ASCII码 B)BCD码 C)汉字编码 D)补码 3、计算机病毒可以使整个计算机瘫痪,危害极大。计算机病毒是 A) 一条命令 B)一段特殊的程序 C)一种生物病毒 D)一种芯片 4、...

    浙江苍南仪表厂流量计Modbus-V1.4协议.pdf

    本协议针对流量计而开发,支持多字节二进制数、ASCII字符串、BCD码等类型变量的数据通信; 通信选用MODBUS的03H、07H功能码,并增设用户自定义的64,65H功能码

    苍南仪表流量计Modbus通信协议V1.2

    本协议针对流量计而开发,支持多字节二进制数、 ASCII 字符串、 BCD 码等类型变量的数据通信; 通信选用 MODBUS 的 03H、 07H 功能码,并增设用户自定义的 66H 功能码; 二、支持的 MODBUS 功能码

    java版bs公交服务网源码-full-stack:全栈

    二进制/八进制/十六进制 文本编码 什么是统一码 Unicode 标准为每个字符提供唯一编号,无论平台、设备、应用程序或语言如何。 它已被所有现代软件提供商采用,现在允许通过许多不同的平台、设备和应用程序传输数据而...

    5计算机应用基础.docx

    字节(正确答案) 2、8个字节所含的二进制位数是( ) [单选题] * A.64(正确答案) B.32 C.16 D.8 3、能够将高级语言源程序加工为目标程序的系统软件是( ) [单选题] * A.编辑程序 B.汇编程序 C.解释程序 D.编译程序...

    汇编语言程序设计.林邦杰.陈明

    1-3 二进制数 1-3-1 数字系统 1-3-2 补码 1-3-3 BCD码 1-4 十六进制表示法 1-5 ASCII码 1-6 个人计算机组成 1-6-1 处理器 1-6-2 内部存储器 1-6-3 段与地址 1-6-4 寄存器 1-7 硬件中断 课后习题 第2章 程序加载并...

    计算机应用基础(计算机一级)课件.pptx

    编码种类: 数字:原码,反码,补码,BCD码 字符:ASCII, 一个字节存储 汉字:国标码 输入码(拼音、五笔等) 存储码(二进制占两个字节) 输出码(点阵形式编码) 音像多媒体(压缩标准JPEG、MPEG等) 计算机应用...

    计算机应用基础选择题.docx

    一个字节由___ B ___二进制数组成。 A.4位 B.8位 C.16位 D.32位 16.计算机从1946年至今已经发展了4代,其中第2代计算机称为_ B ___时代。 A.中小规模集成电路B.晶体管C.电子管D.大规模集成电路 17.关于网络协议,...

    计算机应用基础试题和答案解析.doc

    2、在微型计算机中,应用最普遍的字符编码是 A&gt; ASCII码 B&gt;BCD码 C&gt;汉字编码 D&gt;补码 3、计算机病毒可以使整个计算机瘫痪,危害极大。计算机病毒是 A&gt; 一条命令 B&gt;一段特殊的程序 C&gt;一种生物病毒 D&gt;一种芯片 4、计算机...

    《计算机应用基础》客观题附答案.doc

    A、20亿个字节 B、20亿个二进制位 C、200亿个字节 D、200亿个二进制位 7. 能直接与CPU交换信息的存储器是___C___。 A、硬盘存储器 B、CD-ROM C、内存储器 D、U盘存储器 8. 在微机中,西文字符所采用的编码是___B___...

    《计算机应用基础》客观题附答案.docx

    A、20亿个字节 B、20亿个二进制位 C、200亿个字节 D、200亿个二进制位 7. 能直接与CPU交换信息的存储器是___C___。 A、硬盘存储器 B、CD-ROM C、内存储器 D、U盘存储器 8. 在微机中,西文字符所采用的编码是___B___...

    单片机实现的简易计算器源代码

    2. 由于所采用的浮点程序库的限制(MCU平台只找到这个……),浮点运算采用3字节二进制补码表示,有效数字6位。对于输入输出,采用3字节BCD码浮点数格式,有效数字只有4位,因此最终有效数字只有4位。 3. 可进行连续...

    51单片机实现的简易计算器

    2. 由于所采用的浮点程序库的限制(MCU平台只找到这个……),浮点运算采用3字节二进制补码表示,有效数字6位。对于输入输出,采用3字节BCD码浮点数格式,有效数字只有4位,因此最终有效数字只有4位。

Global site tag (gtag.js) - Google Analytics