java 16进制数据格式化处理工具类,16进制byte数组转String

来源:互联网 发布:解压缩软件安卓版 编辑:程序博客网 时间:2024/05/18 03:07

废话不多说,直接上代码。转换16进制字节数组,做数据处理时用得着,收藏吧!

/** * Created by xiaoming on 2017-10-13 15:02. * * @mail sgyingyin@sina.com * @desc 16进制数据处理工具类 */public class HexDump {    private final static char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};//十六进制的组成元素    /**     * 字节数组以String形式输出 以空格分隔,如:FE 00 12 0F 0E     *     * @param array 字节数组     * @return     */    public static String dumpHexString(byte[] array) {        return dumpHexString(array, 0, array.length);    }    /**     * 字节数组以String形式输出 字节间以空格分隔     *     * @param array  字节数组     * @param offset 起始位置     * @param length 长度     * @return     */    public static String dumpHexString(byte[] array, int offset, int length) {        StringBuilder result = new StringBuilder();        byte[] line = new byte[16];        int lineIndex = 0;        result.append("\n0x");        result.append(toHexString(offset));        for (int i = offset; i < offset + length; i++) {            if (lineIndex == 16) {                result.append(" ");                for (int j = 0; j < 16; j++) {                    if (line[j] > ' ' && line[j] < '~') {                        result.append(new String(line, j, 1));                    } else {                        result.append(".");                    }                }                result.append("\n0x");                result.append(toHexString(i));                lineIndex = 0;            }            byte b = array[i];            result.append(" ");            result.append(HEX_DIGITS[(b >>> 4) & 0x0F]);            result.append(HEX_DIGITS[b & 0x0F]);            line[lineIndex++] = b;        }        if (lineIndex != 16) {            int count = (16 - lineIndex) * 3;            count++;            for (int i = 0; i < count; i++) {                result.append(" ");            }            for (int i = 0; i < lineIndex; i++) {                if (line[i] > ' ' && line[i] < '~') {                    result.append(new String(line, i, 1));                } else {                    result.append(".");                }            }        }        return result.toString();    }    /**     * 字节转16进制String     *     * @param b 字节     * @return     */    public static String toHexString(byte b) {        return toHexString(toByteArray(b));    }    /**     * 字节数组转16进制String,无分隔,如:FE00120F0E     *     * @param array 字节数组     * @return     */    public static String toHexString(byte[] array) {        return toHexString(array, 0, array.length);    }    /**     * 字节数组转16进制String,无分隔,如:FE00120F0E     *     * @param array  字节数组     * @param offset 起始     * @param length 长度     * @return     */    public static String toHexString(byte[] array, int offset, int length) {        char[] buf = new char[length * 2];        int bufIndex = 0;        for (int i = offset; i < offset + length; i++) {            byte b = array[i];            buf[bufIndex++] = HEX_DIGITS[(b >>> 4) & 0x0F];            buf[bufIndex++] = HEX_DIGITS[b & 0x0F];        }        return new String(buf);    }    /**     * int转16进制String     *     * @param i     * @return     */    public static String toHexString(int i) {        return toHexString(toByteArray(i));    }    /**     * 字节转数组     *     * @param b     * @return     */    public static byte[] toByteArray(byte b) {        byte[] array = new byte[1];        array[0] = b;        return array;    }    /**     * int转字节数组     *     * @param i     * @return     */    public static byte[] toByteArray(int i) {        byte[] array = new byte[4];        array[3] = (byte) (i & 0xFF);        array[2] = (byte) ((i >> 8) & 0xFF);        array[1] = (byte) ((i >> 16) & 0xFF);        array[0] = (byte) ((i >> 24) & 0xFF);        return array;    }    /**     * 十六进制转int     *     * @param c     * @return     */    private static int toByte(char c) {        if (c >= '0' && c <= '9') return (c - '0');        if (c >= 'A' && c <= 'F') return (c - 'A' + 10);        if (c >= 'a' && c <= 'f') return (c - 'a' + 10);        throw new RuntimeException("Invalid hex char '" + c + "'");    }    /**     * 十六进制字符串转字节数组     *     * @param hexString 如:FE00120F0E     * @return     */    public static byte[] hexStringToByteArray(String hexString) {        int length = hexString.length();        byte[] buffer = new byte[length / 2];        for (int i = 0; i < length; i += 2) {            buffer[i / 2] = (byte) ((toByte(hexString.charAt(i)) << 4) | toByte(hexString.charAt(i + 1)));        }        return buffer;    }}
阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝吃母乳不长体重怎么办 9个月宝宝不长牙怎么办 3个月宝宝过胖怎么办 宝宝长的很慢怎么办 想一个月瘦20斤怎么办 山药弄胳膊上痒怎么办 手碰山药很痒怎么办 手摸了山药很痒怎么办 手切了山药很痒怎么办 山药弄的身上痒怎么办 疣迪去除疣体怎么办 尖锐湿庞出血了怎么办 尿道口周围烂了怎么办 尖锐湿庞复发了怎么办 宝宝脸上长湿疹怎么办如何治疗 孕妇得尖锐湿庞怎么办 痘痘留下的小坑怎么办 花洒固定座坏了怎么办 脚上起水泡烂了怎么办 月经期吃了芒果怎么办 月经量少又黑怎么办 来月经黑色的血怎么办 月经来的是黑色怎么办 来月经有血块是怎么办 月经又少又黑怎么办 来月经发黑又少怎么办 月经血发黑量少怎么办 做人流后肚子胀怎么办 怀孕见红了肚子不痛怎么办 月经来是黑色的怎么办 怀孕了长了痔疮怎么办 怀孕了有外痔疮怎么办 孕妇长痔疮很痛怎么办 孕9个月尿路感染怎么办 旁边有人尿不出来怎么办 外阴破皮了应该怎么办 脸上长脂肪粒怎么办怎么能消除 挤黑头留下的坑怎么办 长痘留下的坑怎么办 鼻子上留下黑印怎么办 狗狗眼里长息肉怎么办