/**
 * Copyright 2019 DH
 * All right reserved.
 * 项目名称: 运维系统
 * 创建日期:2023/11/14
 */
package org.springblade.utils;

/*** 
 * Date:2023/11/14
 * Title:文件所属模块（必须填写）
 * Description：对本文件的详细描述，原则上不能少于30字
 * @author dylan
 * @version 1.0
 * Remark：认为有必要的其他信息
 */
public class BytesHelp {
    public static byte[] hexStr2Bytes(String hexString) {
        hexString = hexString.toLowerCase();
        int remainder = hexString.length() % 2;
        if (remainder > 0) {
            hexString = "0" + hexString;
        }
        final byte[] byteArray = new byte[hexString.length() / 2];
        int k = 0;
        for (int i = 0; i < byteArray.length; i++) {
            //因为是16进制，最多只会占用4位，转换成字节需要两个16进制的字符，高位在先
            //将hex 转换成byte   "&" 操作为了防止负数的自动扩展
            // hex转换成byte 其实只占用了4位，然后把高位进行右移四位
            // 然后“|”操作  低四位 就能得到 两个 16进制数转换成一个byte.
            //
            byte high = (byte) (Character.digit(hexString.charAt(k), 16) & 0xff);
            byte low = (byte) (Character.digit(hexString.charAt(k + 1), 16) & 0xff);
            byteArray[i] = (byte) (high << 4 | low);
            k += 2;
        }
        return byteArray;
    }

    public static short bytes2short(byte[] bs) {
        short s = (short) (bs[1] & 0xFF);
        s |= (bs[0] << 8) & 0xFF00;
        return s;
    }
}
