2012-07-18 140 views
11

如何將一個整數轉換爲一個4字節的數組?如何將整數轉換爲字節數組php

這裏是確切的代碼我想端口(C#)

int i = 123456; 
byte[] ar = BitConverter.GetBytes(i); 
// ar will contain {64, 226, 1, 0} 

我怎麼會做在PHP中完全一樣的東西?

+1

您是否正在尋找的結果是一個包含*十進制數字* 64,226等的數組?或者你真的在尋找*字節*,在PHP中是字符串? – deceze 2012-07-18 15:36:55

回答

17

等效轉換是

$i = 123456; 
$ar = unpack("C*", pack("L", $i)); 

See it in action

雖然字節順序(小/大端)依賴於機器結構(因爲它也是在BitConverter的情況下)。這可能會或可能不會很好。

+1

按預期工作。謝謝。 – user1392060 2012-07-18 15:39:21

0
$i = 123456; 
$byte_array = unpack('C*', $i); 

var_dump($byte_array); 
array(6) { 
    [1]=> 
    int(49) 
    [2]=> 
    int(50) 
    [3]=> 
    int(51) 
    [4]=> 
    int(52) 
    [5]=> 
    int(53) 
    [6]=> 
    int(54) 
} 
+0

對不起,但這似乎是錯誤的。正如我發佈的,「123456」的正確解決方案是64,226,1,0。另外,數組必須包含4個元素。你的包含6.(整數總是4字節) – user1392060 2012-07-18 15:33:40

+0

嗯,你是對的。 PHP在unpack()調用中將整數轉換爲字符串。抱歉,錯誤的答案。 – 2012-07-18 15:36:04

4

由於PHP中的字節數組相當於是一個字符串,這個會做:

$bytes = pack('L', 123456); 

直觀地瞭解,使用bin2hex

echo bin2hex($bytes); 
// 40e20100 
// (meaning 64, 226, 1, 0) 
+0

可能是真的。但我仍然需要數組中的單個字節。不管怎麼說,還是要謝謝你。 – user1392060 2012-07-18 16:43:54

+0

@user'echo $ bytes [0],$ byte [1],$ byte [2],$ byte [3];'PHP字符串*本質上是字節數組。 – deceze 2012-07-18 16:45:36

+0

哦,好的!那麼請原諒我的無知。現在你提到它了,我認爲我可能會在PHP中使用很多東西... – user1392060 2012-07-18 17:08:02