2012-07-18 34 views
11

整数を4バイトの配列に変換するにはどうすればよいですか?ここで PHPで整数からバイト配列に変換する方法

は(C#で)私はポートにしたい正確なコードである

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

どのように私はPHPで同じことをしますか?

+1

あなたがする結果を探しています* 10進数* 64,226などを含む配列?または、実際にPHPで文字列になる*バイト*を探していますか? – deceze

答えて

17

等価変換は

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

See it in actionあります。

バイトオーダー(little/bigエンディアン)はマシンアーキテクチャに依存します(BitConverterの場合も同様です)。それは良いかもしれないかもしれません。

+1

意図したとおりに動作します。ありがとう。 – user1392060

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

+0

うーん、あなたは正しいです。 PHPはunpack()呼び出しで整数を文字列に変換します。間違った答えを申し訳ありません。 –

4

PHPのbyte配列の同等が文字列であるので、これはやる:

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

ていることに可視化するために、bin2hexを使用します。

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

本当かもしれません。しかし、私はまだ配列内の単一のバイトが必要でした。とにかくありがとう。 – user1392060

+0

@user 'echo $ bytes [0]、$ byte [1]、$ byte [2]、$ byte [3];' PHP文字列は*本質的にバイト配列です。 – deceze

+0

ああ、OK!私の無知を許してください。今度はそれについて言及しますが、私はPHPで多くのことを過度に複雑にしていると思います。 – user1392060

関連する問題