wake-up-neo.net

PHP konvertieren Sie String in Hex und Hex in String

Ich habe das Problem beim Konvertieren zwischen diesem Typ 2 in PHP. Dies ist der Code, den ich in Google gesucht habe

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;
}

Ich überprüfe es und habe es herausgefunden, wenn ich mit XOR verschlüssele.

Ich habe den String "this is the test", nach XOR mit einem Schlüssel habe ich das Ergebnis im String ↕↑↔§P↔§P ♫§T↕§↕. Danach habe ich versucht, es mittels der Funktion strToHex () in hex umzuwandeln und bekam diese 12181d15501d15500e15541215712. Dann habe ich mit der Funktion hexToStr () getestet und ich habe ↕↑↔§P↔§P♫§T↕§q. Also, was soll ich tun, um dieses Problem zu lösen? Warum ist es falsch, wenn ich diesen 2-Style-Wert konvertiere?

34
JoeNguyen

Für jedes Zeichen mit ord ($ char) <16 erhalten Sie einen HEX zurück, der nur 1 lang ist. Sie haben vergessen, 0 Padding hinzuzufügen.

Dies sollte es lösen:

<?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";
46
boomla

PHP:

zeichenfolge zu Hex:

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

hex to string:

pack("H*", $hex);
21
زياد

Für Leute, die hier enden und nur nach der Hex-Darstellung einer (binären) Zeichenfolge suchen.

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

hex2bin('74686174277320616c6c20796f75206e656564');
# that's all you need
13
Philippe Gerber

Ich verwende Folgendes:

function strhex($string) {
  $hexstr = unpack('H*', $string);
  return array_shift($hexstr);
}
13
Bill Shirley
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);
}
1
Kamaro Lambert

Mit dem folgenden Code können Sie das Bild in eine Hex-Zeichenfolge konvertieren 

<?php
$image = 'sample.bmp';
$file = fopen($image, 'r') or die("Could not open $image");
while ($file && !feof($file)){
$chunk = fread($file, 1000000); # You can affect performance altering
this number. YMMV.
# This loop will be dog-slow, almost for sure...
# You could snag two or three bytes and shift/add them,
# but at 4 bytes, you violate the 7fffffff limit of dechex...
# You could maybe write a better dechex that would accept multiple bytes
# and use substr... Maybe.
for ($byte = 0; $byte < strlen($chunk); $byte++)){
echo dechex(ord($chunk[$byte]));
}
}
?>
0

Ich habe nur die Hälfte der Antwort, aber ich hoffe, dass es nützlich ist, da es Unterstützung für Unicode (utf-8) hinzufügt

//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;
}

Zu bespannen

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

Quelle: http://www.php.net/manual/de/function.chr.php#Hcom55978

0
Timo Huovinen

Mit @ bill-shirley antworten Sie mit ein wenig Zusatz

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

Verwendungszweck:

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