Hướng dẫn dùng hextodec trong PHP

Tôi gặp sự cố khi chuyển đổi giữa 2 loại này trong PHP. Đây là mã tôi đã tìm kiếm trên 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;
}

Tôi kiểm tra nó và phát hiện ra điều này khi tôi sử dụng XOR để mã hóa.

Tôi có chuỗi "this is the test", sau khi XOR với một khóa, tôi có kết quả là chuỗi ↕↑↔§P↔§P ♫§T↕§↕. Sau đó, tôi đã cố gắng chuyển đổi nó thành hex bằng hàm strToHex () và tôi nhận được những thứ này 12181d15501d15500e15541215712. Sau đó, tôi đã thử nghiệm với hàm hexToStr () và tôi có ↕↑↔§P↔§P♫§T↕§q. Vì vậy, tôi phải làm gì để giải quyết vấn đề này? Tại sao nó sai khi tôi chuyển đổi giá trị 2 kiểu này?

  • php
  • string
  • hex

55 hữu ích 4 bình luận 225k xem chia sẻ

answer

89

Đối với những người kết thúc ở đây và chỉ đang tìm kiếm biểu diễn hex của một chuỗi (nhị phân).

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

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

Tài liệu: bin2hex , hex2bin .

89 hữu ích 1 bình luận chia sẻ

answer

53

Đối với bất kỳ char nào có ord ($ char) <16, bạn sẽ nhận được HEX trở lại chỉ dài 1. Bạn quên thêm 0 khoảng đệm.

Điều này sẽ giải quyết nó:

53 hữu ích 2 bình luận chia sẻ

answer

33

PHP:

chuỗi thành hex:

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

hex thành chuỗi:

pack("H*", $hex);

33 hữu ích 2 bình luận chia sẻ

answer

13

Đây là những gì tôi sử dụng:

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

13 hữu ích 1 bình luận chia sẻ

answer

1

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 hữu ích 0 bình luận chia sẻ

answer

1

Sử dụng câu trả lời @ bill-shirley với một chút bổ sung

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

Sử dụng:

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

1 hữu ích 2 bình luận chia sẻ

answer

0

Tôi chỉ có một nửa câu trả lời, nhưng tôi hy vọng rằng nó hữu ích vì nó bổ sung hỗ trợ 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;
}

Để xâu chuỗi

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

Nguồn: http://www.php.net/manual/en/ Chức năng.chr.php#Hcom55978

0 hữu ích 0 bình luận chia sẻ

answer

0

Bạn có thể thử mã sau để chuyển đổi hình ảnh thành chuỗi hex


0 hữu ích 0 bình luận chia sẻ

Đăng nhập để trả lời câu hỏi

Có thể bạn quan tâm