用于将十进制ASCII转换为ASCII字符的PHP函数

时间:2014-10-03 07:34:35

标签: php ascii

我完全失去了,试图转换十进制字符串,而不是oct,只是简单的十进制,字符数变为纯文本。

字符串看起来像: 495051979899100(123abcd)

如果我有办法预测字符串包含的内容,我可以整天使用chr(),但我真的不知道,所以我该怎么办?

3 个答案:

答案 0 :(得分:3)

你的问题是不明确的,即没有任何假设,输入字符串可以产生指数数量的输出字符串,它们都满足约束条件。

我们假设使用ASCII表示ascii的可读(不是控制部分)。因此,任何有效的ascii值都在32128之间。因此,您知道如果前两个字符代表一个值,则严格小于32,它将在100+范围内。

您的算法应同时执行两项操作:

  • 读出前两个字符。
  • 如果该值小于32,则该值位于100+范围内,因此读取三个字符并进行转换,如果不是-100范围内,则转换为这两个人物。

或者在PHP中:

$s = "495051979899100";
$n = strlen($s);
$result = "";
for ($x=0; $x<=$n; $x += 2) {
    $temp = intval(substr($s,$x,2));
    if($temp < 32) {
        $temp = intval(substr($s,$x,3));
        if($temp > 128) {
            die "Assumption error";
        }
        $x++;
    }
    $result .= chr($temp);
}
echo $result;

答案 1 :(得分:2)

是的,几乎写了相同的代码

$str = '495051979899100';
$ind = 0; $out = '';
while($ind < strlen($str))
{
    $two = substr($str, $ind, 2);
    if ($two >= 32) {
        $out .= chr($two);
        $ind += 2;
    } else {
        $out .= chr(substr($str, $ind, 3));
        $ind += 3;        
    }
}

echo $out;

答案 2 :(得分:2)

我喜欢限制的方式是char可以是32到128。

$value = '495051979899100';
preg_match_all('/3[2-9]|[4-9][0-9]|1[0-1][0-9]|12[0-8]/', $value, $matches);
var_dump(implode(array_map('chr',$matches[0])));
// string(7) "123abcd"