我正在写一个简单的工具,用它的ascii等价物替换字符串中的所有十六进制。
我可以用正则表达式替换内容;但是,当尝试在十六进制上运行pack时,并没有将其转换为char
$str = '${\\"GL\\x47\\x4c\\x4c\\x53\\"}';
$re = '/(\\\\x[0-9a-fA-F]+)/m';
$str = preg_replace_callback('/(\\\\x[0-9a-fA-F]+)/m', function($matches){
foreach($matches as $match){
return pack("H*",bin2hex($match));}
}, $str);
print_r($str);
答案 0 :(得分:0)
您为什么要使用bin2hex
?我只需从十六进制表示中去除\ x,然后使用新剥离的十六进制字符串作为pack参数:
<?php
$str = '${\\"GL\\x47\\x4c\\x4c\\x53\\"}';
$re = '/(\\\\x[0-9a-fA-F]+)/m';
$str = preg_replace_callback('/(\\\\x[0-9a-fA-F]+)/m', function($matches){
foreach($matches as $match){
$match = preg_replace("/\\\\x/","",$match);
return pack("H*",$match);
}
}, $str);
print_r($str);
${\"GLGLLS\"}