online hexadecimal hex2bin data convert binario bin2hex php binary hex

hexadecimal - PHP binario a maleficio con ceros a la izquierda



php hexadecimal (3)

Tengo el siguiente código:

<? $binary = "110000000000"; $hex = dechex(bindec($binary)); echo $hex; ?>

Lo cual funciona bien, y obtengo un valor de c00.

Sin embargo, cuando intento convertir 000000010000 obtengo el valor "10". Lo que realmente quiero son todos los ceros a la izquierda, así que puedo obtener "010" como resultado final.

¿Cómo hago esto?

EDITAR: Debo señalar, la longitud del número binario puede variar. Entonces, $ binary podría ser 00001000, lo que daría como resultado 08.


Puede anteponer el número requerido de ceros a la izquierda con algo como:

$hex = str_repeat("0", floor(strspn($binary, "0") / 4)).$hex;

¿Qué hace esto?

  1. Descubre cuántos ceros a la izquierda tiene tu cadena binaria con strspn .
  2. Esto se traduce en el número de ceros iniciales que necesita en la representación hexadecimal. Grupos enteros de 4 bits cero iniciales deben traducirse a un dígito hexadecimal cero; cualquier bit cero sobrante ya está codificado en el primer dígito hexadecimal distinto de cero de la salida, por lo que usamos floor para expulsarlos.
  3. Prepara muchos ceros al resultado usando str_repeat .

Tenga en cuenta que si el número de bits de entrada no es un múltiplo de 4, esto podría dar como resultado un dígito hexadecimal menos cero de lo esperado. Si esa es una posibilidad, tendrá que ajustarse en consecuencia.


Puedes hacerlo muy fácilmente con sprintf :

// Get $hex as 3 hex digits with leading zeros if required. $hex = sprintf(''%03x'', bindec($binary)); // Get $hex as 4 hex digits with leading zeros if required. $hex = sprintf(''%04x'', bindec($binary));

Para manejar una cantidad variable de bits en $ binary:

$fmt = ''%0'' . ((strlen($binary) + 3) >> 2) . ''x''; $hex = sprintf($fmt, bindec($binary));


Use str_pad() para eso:

// maximum number of chars is maximum number of words // an integer consumes on your system $maxchars = PHP_INT_SIZE * 2; $hex = str_pad($hex, $maxchars, "0", STR_PAD_LEFT);