2015-05-11 3 views
0

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

$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? Я был уверен, что есть способ ...

+2

[ога()] (HTTP: // WWW .php.net/manual/en/function.ord.php) –

+0

@MarkBaker спасибо - вы должны были отправить свой комментарий в качестве ответа, чтобы я мог его принять. –

ответ

0

Per @ комментарий 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) "" 
} 
0

PHP не имеет символьного типа. Вы правы, что в результате вы получаете строку из 1 символа.

Смежные вопросы