Bootstrap

php把十六进制转化成字符串 和 字符串转十六进制

最近项目中碰到需要把接收十六进制的数据,十六进制的数据不便阅读

方法一,只是不同的函数

// 十六进制转字符串
function hexToStr($hex)
{
    $hex = str_replace(' ', '', $hex);    // 去除空格
    $string = '';
    for ($i = 0; $i < strlen($hex) - 1; $i += 2) {
        $string .= chr(hexdec($hex[$i] . $hex[$i + 1]));
    }
    return $string;
}

// 字符串转十六进制
function strToHex($str){
    $hex='';
    for ($i=0; $i < strlen($str); $i++){
        $hex.= dechex(ord($str[$i]));
    }
    return $hex;
}

// 使用
// 假设从下位机接收到的十六进制数据存储在$hexData变量中
$hexData = "7b0a 2020 226d 7367 223a 2022 6865 6c6c 6f20 7869 616f 7775 3131 2022 0a7d";
// 转换为字符串
$str = hexToStr($hexData);
echo $str . "\n";
echo $hexData = strToHex(json_encode($str)). "\n";
$str = hexToStr($hexData);
echo $str . "\n";

结果
在这里插入图片描述

方法二(调用的函数不一样)


/**
 * 将字符(包括汉字) 转换成16进制
 * @param $str
 * @return string
 */
function getStrHex($str)
{
    $str_hex = "";
    for ($i = 0; $i < strlen($str); $i++) {
        // ord — 转换字符串第一个字节为 0-255 之间的值
        $hex = base_convert(ord(substr($str, $i, 1)), 10, 16);
        if ($hex != "0")
            $str_hex = $str_hex . $hex;
    }
    return $str_hex;
}

/**
 * 将16进制转换成字符(包括汉字)
 * utf-8
 * @param $str_hex
 * @return string
 */
function getStrDec($str_hex)
{
    // 去除空格
    $str_hex = str_replace(' ', '', $str_hex);
    $arr = str_split($str_hex, 2);
    $str = '';
    for ($i = 0; $i < count($arr); $i++) {
        if ($arr[$i] != '00') {
            // chr — 从数字生成单字节字符串
            $s = chr(base_convert($arr[$i], 16, 10));
            $str = $str . $s;
        }
    }
    return $str;
}

// 假设从下位机接收到的十六进制数据存储在$hexData变量中
$hexData = "7b0a 2020 226d 7367 223a 2022 6865 6c6c 6f20 7869 616f 7775 3131 2022 0a7d ";
echo $str = getStrDec($hexData) . "\n";
echo $hexData = strToHex(json_encode($str)). "\n";
echo $str = getStrDec($hexData) . "\n";

结果
在这里插入图片描述

;