在PHP中单独的十六进制块

时间:2016-01-05 20:42:54

标签: php hex

任何人都知道如何“分离”这个十六进制代码的块?

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

Complete:
49cd0d1800010000543ace68000000000000000000000000000000000000000

哦,当然......这个价值观,可能会有所不同......我只知道,那将是不一样的。所以,我需要知道如何“计算”块,然后“切割”。

我非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

正则表达式是解决问题的简单方法:

您可以在该链接上看到正则表达式: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个字符
  5. 你可以在这里看到代码示例:

    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