массивы — PHP печатает шестнадцатеричные значения символов в строке

Я хочу напечатать шестнадцатеричные значения каждого из символов в строке PHP. Например, я хочу отобразить шестнадцатеричные значения каждого символа в строке, где я пытаюсь установить четвертый символ в Control-C (0x03).

$str=sprintf('ab1%c',0x03);
for ($cnt=0; $cnt<4; $cnt++)
{
$chr=$str[$cnt];
echo '$str['.$cnt.'] = "'.$str[$cnt].'" = '.sprintf('0x%02x',$chr[0])."\n";
}
var_dump(str_split($str));

Что я получаю, это:

$str[0] = "a" = 0x00
$str[1] = "b" = 0x00
$str[2] = "1" = 0x01
$str[3] = "" = 0x00
array(4) {
[0]=>
string(1) "a"[1]=>
string(1) "b"[2]=>
string(1) "1"[3]=>
string(1) ""}

Кажется, что $chr это строка а не персонаж а также sprintf() печатает целочисленное значение строки — ноль — вместо целочисленного значения одного символа.

Возможно ли сделать это на PHP? Я был уверен, что есть способ …

0

Решение

Согласно комментарию @ MarkBaker, решение заключается в использовании ord() чтобы получить значение персонажа:

$str=sprintf('ab1%c',0x03);
for ($cnt=0; $cnt<4; $cnt++)
{
$chr=$str[$cnt];
echo '$str['.$cnt.'] = "'.$str[$cnt].'" = '.sprintf('0x%02x',ord($chr))."\n";
}
var_dump(str_split($str));

дает ожидаемые результаты:

$str[0] = "a" = 0x61
$str[1] = "b" = 0x62
$str[2] = "1" = 0x31
$str[3] = "" = 0x03
array(4) {
[0]=>
string(1) "a"[1]=>
string(1) "b"[2]=>
string(1) "1"[3]=>
string(1) ""}
1

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

PHP не имеет тип char (символьный). Вы правы, что в результате вы получаете 1-символьную строку.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector