Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Intval和(int)输出为零_Php_Arrays_Int - Fatal编程技术网

Php Intval和(int)输出为零

Php Intval和(int)输出为零,php,arrays,int,Php,Arrays,Int,我确实搜索了stackoverflow和其他地方来解决我的问题,但没有一个地方能帮我解决 在我的while循环中,$myvariable的print_r()输出以下数组: Array ( [1] => 0000890233330000000000000000000000000000000000000000000001b3165721010000000000 ) Array ( [1] => 00008a02333300000000000000000000000000000000

我确实搜索了stackoverflow和其他地方来解决我的问题,但没有一个地方能帮我解决

在我的while循环中,$myvariable的print_r()输出以下数组:

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的答案,了解代码失败的确切原因。