hex2bin dec data convert bytes php string hex

dec - string to binary php



PHP convierte cadena en hexadecimal y hexadecimal en cadena (7)

Tengo el problema al convertir entre este tipo 2 en PHP. Este es el código que busqué en google.

function strToHex($string){ $hex=''''; for ($i=0; $i < strlen($string); $i++){ $hex .= dechex(ord($string[$i])); } return $hex; } function hexToStr($hex){ $string=''''; for ($i=0; $i < strlen($hex)-1; $i+=2){ $string .= chr(hexdec($hex[$i].$hex[$i+1])); } return $string; }

Lo verifiqué y descubrí esto cuando uso XOR para cifrar.

Tengo la cadena "this is the test" , después de XOR con una tecla, tengo el resultado en la cadena ↕↑↔§P↔§P ♫§T↕§↕ . Después de eso, intenté convertirlo en hexadecimal mediante la función strToHex () y obtuve estos 12181d15501d15500e15541215712 . Luego, probé con la función hexToStr () y tengo ↕↑↔§P↔§P♫§T↕§q . Entonces, ¿qué debo hacer para resolver este problema? ¿Por qué está mal cuando convierto este valor de 2 estilos?


Esto es lo que yo uso:

function strhex($string) { $hexstr = unpack(''H*'', $string); return array_shift($hexstr); }


PHP:

cadena a hexadecimal

implode(unpack("H*", $string));

hexadecimal a la cuerda:

pack("H*", $hex);


Para cualquier char con ord ($ char) <16, obtienes un HEX de vuelta que solo dura 1. Se te olvidó agregar 0 rellenos.

Esto debería resolverlo:

<?php function strToHex($string){ $hex = ''''; for ($i=0; $i<strlen($string); $i++){ $ord = ord($string[$i]); $hexCode = dechex($ord); $hex .= substr(''0''.$hexCode, -2); } return strToUpper($hex); } function hexToStr($hex){ $string=''''; for ($i=0; $i < strlen($hex)-1; $i+=2){ $string .= chr(hexdec($hex[$i].$hex[$i+1])); } return $string; } // Tests header(''Content-Type: text/plain''); function test($expected, $actual, $success) { if($expected !== $actual) { echo "Expected: ''$expected''/n"; echo "Actual: ''$actual''/n"; echo "/n"; $success = false; } return $success; } $success = true; $success = test(''00'', strToHex(hexToStr(''00'')), $success); $success = test(''FF'', strToHex(hexToStr(''FF'')), $success); $success = test(''000102FF'', strToHex(hexToStr(''000102FF'')), $success); $success = test(''↕↑↔§P↔§P ♫§T↕§↕'', hexToStr(strToHex(''↕↑↔§P↔§P ♫§T↕§↕'')), $success); echo $success ? "Success" : "/nFailed";


Para las personas que terminan aquí y solo están buscando la representación hexadecimal de una cadena (binaria).

bin2hex("that''s all you need"); # 74686174277320616c6c20796f75206e656564 hex2bin(''74686174277320616c6c20796f75206e656564''); # that''s all you need


Solo tengo la mitad de la respuesta, pero espero que sea útil ya que agrega soporte para Unicode (utf-8)

//decimal to unicode character function unichr($dec) { if ($dec < 128) { $utf = chr($dec); } else if ($dec < 2048) { $utf = chr(192 + (($dec - ($dec % 64)) / 64)); $utf .= chr(128 + ($dec % 64)); } else { $utf = chr(224 + (($dec - ($dec % 4096)) / 4096)); $utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64)); $utf .= chr(128 + ($dec % 64)); } return $utf; }

Encadenar

var_dump(unichr(hexdec(''e641'')));

Fuente: http://www.php.net/manual/en/function.chr.php#Hcom55978


Usando la respuesta de @ bill-shirley con una pequeña adición.

function str_to_hex($string) { $hexstr = unpack(''H*'', $string); return array_shift($hexstr); } function hex_to_str($string) { return hex2bin("$string"); }

Uso:

$str = "Go placidly amidst the noise"; $hexstr = str_to_hex($str);// 476f20706c616369646c7920616d6964737420746865206e6f697365 $strstr = hex_to_str($str);// Go placidly amidst the noise


function hexToStr($hex){ // Remove spaces if the hex string has spaces $hex = str_replace('' '', '''', $hex); return hex2bin($hex); } // Test it $hex = "53 44 43 30 30 32 30 30 30 31 37 33"; echo hexToStr($hex); // SDC002000173 /** * Test Hex To string with PHP UNIT * @param string $value * @return */ public function testHexToString() { $string = ''SDC002000173''; $hex = "53 44 43 30 30 32 30 30 30 31 37 33"; $result = hexToStr($hex); $this->assertEquals($result,$string); }