2012-07-18 26 views
11

¿cómo convertiría un entero a una matriz de 4 bytes?Cómo convertir un entero a matriz de bytes en php

Aquí es el código exacto Quiero puerto (en C#)

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

¿Cómo iba a hacer exactamente lo mismo en PHP?

+1

¿Está buscando que el resultado sea una matriz que contiene * números decimales * 64, 226, etc. ¿O está realmente buscando * bytes *, que en PHP sería una cadena? – deceze

Respuesta

17

La conversión equivalente es

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

See it in action.

Sin embargo, debe tener en cuenta que el orden de bytes (little/big endian) depende de la arquitectura de la máquina (como también es el caso de BitConverter). Eso podría o no ser bueno.

+1

Funciona según lo previsto. Gracias. – 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

Lo siento, pero esto parece incorrecto. La solución correcta para "123456" es 64,226,1,0 como publiqué. Además, la matriz debería contener 4 elementos. La tuya contiene 6. (El número entero es siempre 4 bytes) – user1392060

+0

hmm, tienes razón. PHP convierte el entero en cadena en la llamada a unpack(). perdón por la respuesta incorrecta. –

4

Desde el equivalente a una matriz de bytes en PHP es una cadena, esto va a hacer:

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

Para visualizar que, utilizar bin2hex:

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

Puede ser cierto. Pero aún necesitaba los bytes individuales en una matriz. Gracias de cualquier manera. – user1392060

+0

@user 'echo $ bytes [0], $ byte [1], $ byte [2], $ byte [3];' PHP strings * son * en esencia matrices de bytes. – deceze

+0

¡Oh, está bien! Disculpe mi ignorancia entonces. Ahora que lo mencionas, creo que podría estar sobrecomplicando MUCHAS cosas en PHP ... – user1392060

Cuestiones relacionadas