java 计算两个字节16进制包长

2021/4/15 12:26:42

本文主要是介绍java 计算两个字节16进制包长,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

包头经常用两个字节压缩bcd码来表示

打包,如果338字节,转换成十进制数00x01,0x52

 

/**
 * function:2 hex byte[] to int,use pack
 * @param  len
 * @return  2 hex byte[]
 */
public static byte[] convertLen2HexByte(int len) {
    byte[] lenByte = new byte[2];
    String hexLen = Integer.toHexString(len);
    //奇数前补0
    hexLen = (hexLen.length() & 1) == 1 ? "0" + hexLen : hexLen;
    lenByte = convertHexStrToByteArray(hexLen);
    return lenByte;
}

/**
 * 将十六进制字符串转换成字节数组
 *
 * @param srcHex
 *            十六进制字符串
 * @return 字节数组
 */
public static byte[] convertHexStrToByteArray(String srcHex) {
    byte[] retByteArray = new byte[srcHex.length() / 2];
    byte tmpByte;
    String sDecode;
    for (int i = 0; i < srcHex.length() / 2; i++) {
        sDecode = "0x" + srcHex.substring(2 * i, 2 * i + 2);
        tmpByte = Integer.decode(sDecode).byteValue();
        retByteArray[i] = tmpByte;
    }
    return retByteArray;
}
/**
 * function:2 hex byte[] to int, use unpack
 * @param srcByteArray 2 hex byte[]
 * @return len
 */
public static int convert2HexByte2ToLen(byte[] srcByteArray) {
    if (srcByteArray == null)
        return -1;
    if (srcByteArray.length != 2)
        return -1;
    int firstByteHigh =  ((srcByteArray[0] >> 4)&0x0f);
    int firstByteLower = (srcByteArray[0] & 0x0F);
    int secondByteHigh =  ((srcByteArray[1] >> 4)&0x0f);
    int secondByteLower =  (srcByteArray[1] & 0x0F);
    return firstByteHigh*16*16*16 + firstByteLower * 16*16 + secondByteHigh * 16 + secondByteLower;
}

 

 

 

 


这篇关于java 计算两个字节16进制包长的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程