我完全失去了,试图转换十进制字符串,而不是oct,只是简单的十进制,字符数变为纯文本。
字符串看起来像: 495051979899100(123abcd)
如果我有办法预测字符串包含的内容,我可以整天使用chr(),但我真的不知道,所以我该怎么办?
答案 0 :(得分:3)
你的问题是不明确的,即没有任何假设,输入字符串可以产生指数数量的输出字符串,它们都满足约束条件。
我们假设使用ASCII表示ascii的可读(不是控制部分)。因此,任何有效的ascii值都在32
和128
之间。因此,您知道如果前两个字符代表一个值,则严格小于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"