【问题标题】:PHP print hex values of characters in a stringPHP 打印字符串中字符的十六进制值
【发布时间】:2023-03-18 05:57:01
【问题描述】:

我想打印 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 是一个 string 而不是 character 并且sprintf() 正在打印字符串的整数值 - 零 - 而不是整数值单个字符。

在 PHP 中可以做到这一点吗?我确定有办法...

【问题讨论】:

  • @MarkBaker 谢谢你 - 你应该发表你的评论作为答案,所以我可以接受它。

标签: php arrays string hex character


【解决方案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) ""
}

【讨论】:

    【解决方案2】:

    PHP 没有 char(字符)类型。你是正确的,你得到一个 1 字符的字符串作为结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 2019-07-27
      • 2014-10-07
      • 1970-01-01
      • 2011-12-25
      • 2020-11-07
      相关资源
      最近更新 更多