Php Intval和(int)输出为零
我确实搜索了stackoverflow和其他地方来解决我的问题,但没有一个地方能帮我解决 在我的while循环中,$myvariable的print_r()输出以下数组:Php Intval和(int)输出为零,php,arrays,int,Php,Arrays,Int,我确实搜索了stackoverflow和其他地方来解决我的问题,但没有一个地方能帮我解决 在我的while循环中,$myvariable的print_r()输出以下数组: Array ( [1] => 0000890233330000000000000000000000000000000000000000000001b3165721010000000000 ) Array ( [1] => 00008a02333300000000000000000000000000000000
Array
(
[1] => 0000890233330000000000000000000000000000000000000000000001b3165721010000000000
)
Array
(
[1] => 00008a0233330000000000000000000000000000000000000000000001d5165721000000000000
)
Array
(
[1] => 00008b023333000000000000000000000000000000000000000000000109175721000000000000
)
Array
(
[1] => 00008f0233340000000000000000000000000000000000000000000001ad185721000000000000
)
Array
(
[1] => 00009002333500000000000000000000000000000000000000000000018d195721000000000000
)
我使用以下代码取出
$id = substr($myvariable[1], 6, 8);
$cid = hex2bin($id);
$rid = intval(str_replace("\0", '', $cid));
简而言之:
$rid = intval( str_replace("\0", '', hex2bin( substr($myvariable[1], 6, 8) ) ) );
我希望所有5个数组都能得到整数33,除了最后2个是34和35。但是我得到了零(0)。不使用
intval()
,就可以了。我使用(int)
进行测试,得到了相同的零(0)。因此,我最终没有使用intval
/(int)
。虽然在我看来,输出是一个实数,但如果您能帮助我将它们转换为php将理解为实数的整数,我将不胜感激。谢谢。让我们一步一步来:
$id = "02333300";
$cid = hex2bin($id);
现在,$cid
包含以下4个字符:
\02
3
3
\0
然后我们删除\0
字符,因此它包含:
\02
3
3
当我们调用intval($cid)
时,它开始解析字符串,当到达非数字的第一个字符时停止。在本例中,这是第一个字符,因为它是\02
。因为它没有读取任何数字,所以返回0
在调用intval()
之前,需要更改代码以删除任何非打印字符
应该这样做。让我们一步一步来:
$id = "02333300";
$cid = hex2bin($id);
现在,$cid
包含以下4个字符:
\02
3
3
\0
然后我们删除\0
字符,因此它包含:
\02
3
3
当我们调用intval($cid)
时,它开始解析字符串,当到达非数字的第一个字符时停止。在本例中,这是第一个字符,因为它是\02
。因为它没有读取任何数字,所以返回0
在调用intval()
之前,需要更改代码以删除任何非打印字符
应该这样做。打开手册并阅读
注意:此功能不会将十六进制数转换为二进制数。这可以使用base_convert()函数完成。
如果您真的想创建二进制数据而不是以2为基数的字符串,还请注意,在转换为2字节之前,应将3位十六进制字符串填充为4:5.4.4如果输入字符串的长度为奇数,则会引发警告。在PHP5.4.0中,字符串被静默接受,但最后一个字节被截断。@Dave S,我正在使用PHP7.1.1和7.1.5。你的建议有什么问题吗?对不起,把我的字符串库搞混了,我想的是[6]…[8]而不是[6]…[13]。有关代码失败的确切原因,请参阅下面Barmar的答案。打开手册,阅读注意:此函数不会将十六进制数转换为二进制数。这可以使用base_convert()函数完成。
如果您真的想创建二进制数据而不是以2为基数的字符串,还请注意,在转换为2字节之前,应将3位十六进制字符串填充为4:5.4.4如果输入字符串的长度为奇数,则会引发警告。在PHP5.4.0中,字符串被静默接受,但最后一个字节被截断。@Dave S,我正在使用PHP7.1.1和7.1.5。你的建议有什么问题吗?对不起,把我的字符串库搞混了,我想的是[6]…[8]而不是[6]…[13]。请参阅下面Barmar的答案,了解代码失败的确切原因。