PHP 中的独立十六进制块

Separate hex blocks in PHP

有人知道 "separate" 这个十六进制代码块的方法吗?

[49cd0d18] -> 1238175000
[00010000] -> 1
[0069] -> 105
[543ace68] -> timestamp
000000000000000000000000000000000000000

Complete:
49cd0d1800010000543ace68000000000000000000000000000000000000000

哦,当然...这个值,可以不同...我只知道,那不会相同。所以,我需要知道如何"count"块,然后,"cut"。

非常感谢你的帮助!

正则表达式很容易解决这些问题:

您可以在 link 上看到正则表达式:https://regex101.com/r/qP1bC7/1

注意:当您在代码中使用它时,不要忘记在您的正则表达式周围放置分隔符(我的示例中的斜线):

/^(\w{8})(\w{8})(\w{4})(\w{8})(\w{39})$/
  1. 插入符号和美元符号分别分隔字符串的开头和结尾。
  2. 括号是捕获组。
  3. \w 匹配任何字母(A-Z 大小写)、数字 (0-9) 和下划线 (_)。
  4. {8}表示必须正好匹配8个字符

您可以在此处查看代码示例:

http://sandbox.onlinephpfunctions.com/code/c3a0ec3a45c53eb2c1b8e21cb978253ea4a28e52

第三个参数是一个数组,用于存放正则表达式的匹配项(它是通过引用传递的,所以你必须在使用它之前创建它)。第一个 (0) 索引将是整个匹配项,后续索引 (1-6) 将是捕获组的结果(其中有 5 个)。

您还可以使用 PHP 本机函数提取子字符串。

$string = "49cd0d18000100000069543ace68000000000000000000000000000000000000000";

$matches = array();

$matches[] = substr($string, 0, 8);

$matches[] = substr($string, 8, 8);

$matches[] = substr($string, 16, 4);

$matches[] = substr($string, 20, 8);

$matches[] = substr($string, 28, 39);

var_dump($matches);

您可以在此处测试代码:http://sandbox.onlinephpfunctions.com/code/18935d55feb86dffdc17f8854572e0935b4aab0e

附加说明:PHP 本机函数比正则表达式更快。每次使用正则表达式时都必须对其进行编译(但 PHP 保留最后使用的 1000 个正则表达式的池)。如果性能很重要,您可以对这两种解决方案进行基准测试。否则,我会说这两种解决方案是相当等价的。

祝你成功,别忘了点赞,

来自蒙特利尔的 Jonathan Parent-Lévesque