5 votes

Comment convertir un texte en \x codes ?

Je souhaite convertir un texte normal en \x codes pour e.g \x14\x65\x60

Par exemple :

normal text = "base64_decode"
converted \x codes for above text = "\x62\141\x73\145\x36\64\x5f\144\x65\143\x6f\144\x65"

Comment procéder ? Merci d'avance.

6voto

sanmai Points 3990

PHP 5.3 one-liner :

echo preg_replace_callback("/./", function($matched) {
    return '\x'.dechex(ord($matched[0]));
}, 'base64_decode');

Sorties \x62\x61\x73\x65\x36\x34\x5f\x64\x65\x63\x6f\x64\x65

5voto

Evert Points 17625

En ord() vous donne la valeur décimale d'un seul octet. dechex() le convertit en hexadécimal. Pour ce faire, il faut parcourir en boucle chaque caractère de la chaîne et appliquer les deux fonctions.

3voto

DaveRandom Points 45661
$str = 'base64_decode';
$length = strlen($str);
$result = '';

for ($i = 0; $i < $length; $i++) $result .= '\\x'.str_pad(dechex(ord($str[$i])),2,'0',STR_PAD_LEFT);

print($result);

1voto

Jon Points 194296

Voici le code de travail :

function make_hexcodes($text) {
    $retval = '';
    for($i = 0; $i < strlen($text); ++$i) {
        $retval .= '\x'.dechex(ord($text[$i]));
    }

    return $retval;
}

echo make_hexcodes('base64_decode');

Voyez-le en action .

1voto

fyrye Points 759

Pour une alternative à dechex(ord()) vous pouvez également utiliser bin2hex($char) , sprintf('\x%02X') o unpack('H*', $char) . En outre, au lieu d'utiliser preg_replace_callback vous pouvez utiliser array_map con str_split .

echo implode(array_map(function($char) {
    return '\x' . bin2hex($char);
}, (array) str_split($word)));

echo implode(array_map(function($char) {
    return '\x' . implode(unpack('H*', $char));
}, (array) str_split($word)));

echo implode(array_map(function($char) {
    return sprintf('\x%02X', ord($char));
}, (array) str_split($word)));

Ejemplo: https://3v4l.org/6Pc6X

bin2hex

echo implode(array_map(function($char) {
    return '\x' . bin2hex($char);
}, (array) str_split('base64_decode')));

Résultat

\x62\x61\x73\x65\x36\x34\x5f\x64\x65\x63\x6f\x64\x65

déballer

echo implode(array_map(function($char) {
    return '\x' . implode(unpack('H*', $char));
}, (array) str_split('base64_decode')));

Résultat

\x62\x61\x73\x65\x36\x34\x5f\x64\x65\x63\x6f\x64\x65

sprintf

echo implode(array_map(function($char) {
    return sprintf('\x%02X', ord($char));
}, (array) str_split('base64_decode')));

Résultat

\x62\x61\x73\x65\x36\x34\x5f\x64\x65\x63\x6f\x64\x65

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X