2017-05-26 35 views
0

我沒有搜索stackoverflow和其他地方來解決我的問題,但他們都沒有幫助我解決它。Intval和(int)輸出零

裏面我while循環中的print_r(的$ MYVARIABLE)輸出以下陣列:

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)))); 

我期待得到除了最後2個34和35之外的所有5個數組的整數33.但是我獲得零(0)。沒有使用intval(),沒關係。我正在使用(int)進行測試,並得到相同的零(0)。所以我最終沒有使用intval/(int)。雖然輸出結果對我來說是一個真實的數字,但是如果能夠幫助我將這些轉換爲php將它們理解爲實數,那我真的很感激。謝謝。

+1

打開手冊並閱讀'注意此功能不會將十六進制數字轉換爲二進制數字。這可以使用base_convert()函數來完成。' –

+1

如果您確實打算創建二進制數據而非基本2字符串,那麼還應注意,3位十六進制字符串在轉換爲2個字節之前應該填充爲4:5.4。 4 \t如果輸入字符串的長度是奇數,則會引發警告。在PHP 5.4.0中,字符串被默認接受,但最後一個字節被截斷。 –

+0

@Dave S,我使用的是PHP 7.1.1和7.1.5。你的建議可能有問題嗎? –

回答

2

讓我們一步一步來:

$id = "02333300"; 
$cid = hex2bin($id); 

現在$cid包含以下4個字符:

\02 
3 
3 
\0 

然後我們去掉\0角色,所以它包含:

\02 
3 
3 

當我們呼叫intval($cid),它開始parsin g字符串,當它到達不是數字的第一個字符時停止。這是第一個字符,因爲它是\02。由於它沒有讀取任何數字,它將返回0

在調用intval()之前,您需要更改代碼以刪除所有非打印字符。

$rid = preg_replace('/[\0-\31]/', '', $cid); 

應該這樣做。

+0

謝謝Barmar,這已經解決了這個問題。 –