【问题标题】:Treat array values as hex not ascii将数组值视为十六进制而不是 ascii
【发布时间】:2017-08-06 05:52:59
【问题描述】:

我有一串十六进制字节,如下所示:

4E44B4096780031713077AB80040052F2F0C1335000000046D372B27230F150E04000000FFFFFF020000FFFFFFFFFF

我使用

将它们分成字节

$arr1 = str_split($str, 2);

这给了我一个很好的字节数组。但是,PHP 似乎将数组元素视为 ascii,而不是十六进制。这使我无法在它们上制作位掩码等。

如何将这些字节声明为十六进制?

【问题讨论】:

  • 你能告诉我们你的阵列是什么样子的吗
  • 数组 ( [0] => 4E [1] => 44 [2] => B4 [3] => 09 [4] => 67 [5] => 80 [6] = > 03 [7] => 17 [8] => 13 [9] => 07

标签: php arrays hex byte


【解决方案1】:

十六进制甚至更多 ASCII 不是变量的类型,而 this,在任何语言中都不是。

ASCII 只是一个字符表,不是字符串。
十六进制是一种以 16 为基数表示数字的方式,但这种表示本身不再是数字而是字符串。

可以使用函数hexdec 将十六进制字符串转换为十进制。由于您有一个十六进制字符串数组,您可以使用array_map 来转换每个项目。

$result = array_map('hexdec', str_split($str, 2));

【讨论】:

  • 非常感谢。我对此进行了测试,它似乎有效。但是,我还有一个额外的挑战是必须 a) 翻转 2 个(或更多)字节的序列,b) 组合它们,c) 对它们进行位掩码。我不知道怎么做 a & b - 每当我做的时候结果都是错误的。关于如何做到这一点的任何想法?
  • @Mikkel:由于在 SO 上“吸血鬼”一个问题是非常不鼓励的,我建议为此任务发布一个新问题(花时间很好地解释你正在尝试做什么并展示示例一个或多个项目的输入和期望的输出)。但是,请随时在 cmets 中发布此新问题的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 2012-11-12
  • 1970-01-01
相关资源
最近更新 更多