【发布时间】:2021-08-03 08:57:07
【问题描述】:
我有一个文件,其中包含要解释的数据(关键字),并以 4 字节的大端序开始以确定关键字的数量。我似乎无法从中获得正确的整数值。
$bytes = "00000103";
$keywords = preg_replace("/(.{2})(.{2})(.{2})(.{2})/u", "\x$1\x$2\x$3\x$4", $bytes);
var_dump($keywords);
$unpacked = unpack("N", $keywords);
var_dump($unpacked);
输出(不正确):
string(16) "\x00\x00\x01\x03"
array(1) {
[1]=>
int(1551380528)
}
出于测试目的,我将 $keywords 变量更改为:
$bytes = "\x00\x00\x01\x03";
它输出(正确):
string(4) ""
array(1) {
[1]=>
int(259)
}
如何更改 $keywords 的数据类型?搜索了很多,但不幸的是无法让它工作。
PS。发布后,它不会在 string(4) 的正确输出中显示其中的 2 个字符(带问号的框)。
【问题讨论】:
-
要更改数据类型,您可以直接转换它,就像任何
(int)(string)等一样。但是数据类型是您的问题吗? -
如果关闭,也许我的解释。但是,两个 $keywords 都输出到一个字符串,而第一个(不正确)有 16 个字符,而第二个(正确)有 2 个字符。
-
没有解释很好,但我在两个值上都使用
gettype(),它们是相同的,但由于某种原因,严格比较对它们都抛出错误,这告诉我这可能是一个preg_*函数的编码问题,所以我现在只是在谷歌上搜索
标签: php preg-replace pack unpack