PHP 打印字符串中字符的十六进制值
PHP print hex values of characters in a string
我想打印 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 中执行此操作?我确定有办法...
PHP 没有 char(字符)类型。您得到的结果是 1 个字符的字符串是正确的。
根据@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) ""
}
我想打印 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 中执行此操作?我确定有办法...
PHP 没有 char(字符)类型。您得到的结果是 1 个字符的字符串是正确的。
根据@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) ""
}