PHP-функция для преобразования десятичного ASCII в ASCII-символ

Я в полном недоумении, пытаясь преобразовать десятичную строку, а не октаву, просто обычное десятичное число, которое варьируется по количеству символов в обычный текст.

Строка будет выглядеть так:
495051979899100 (123abcd)

Я мог бы использовать chr () весь день, если бы у меня был способ предсказать, что будет содержать строка, но я действительно не могу, так что мне делать?

2

Решение

Ваш вопрос неоднозначен в том смысле, что без каких-либо предположений входная строка может привести к экспоненциальному числу выходных строк, которые все удовлетворяют ограничениям.

Мы предполагаем, что под 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;
3

Другие решения

Да, написал почти тот же код

$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

Мой модный способ с ограничением, что 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"
2