为了账号安全,请及时绑定邮箱和手机立即绑定

PHP将字符串转换为十六进制,并将十六进制转换为字符串

/ 猿问

PHP将字符串转换为十六进制,并将十六进制转换为字符串

PHP
手掌心 2019-11-14 15:17:42

我在PHP的这2种类型之间进行转换时遇到问题。这是我在谷歌搜索的代码


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;

}

我检查了一下,并在使用XOR加密时发现了这一点。


我有字符串"this is the test",在与键进行XOR之后,结果在string中↕↑↔§P↔§P ♫§T↕§↕。之后,我尝试通过功能strToHex()将其转换为十六进制,并得到了这些12181d15501d15500e15541215712。然后,我使用功能hexToStr()进行了测试,然后得到了↕↑↔§P↔§P♫§T↕§q。那么,该怎么办才能解决这个问题呢?转换这2个样式值时为什么会出错?


查看完整描述

3 回答

?
一只萌萌小番薯

对于ord($ char)<16的任何char,您将获得仅1长的十六进制返回值。您忘记添加0填充。


这应该解决它:


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


查看完整回答
反对 回复 2019-11-14
?
慕容4345310

对于那些最终来到这里并且只是在寻找(二进制)字符串的十六进制表示的人。


bin2hex("that's all you need");

# 74686174277320616c6c20796f75206e656564


hex2bin('74686174277320616c6c20796f75206e656564');

# that's all you need


查看完整回答
反对 回复 2019-11-14
?
守候你守候我

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

}


查看完整回答
反对 回复 2019-11-14

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信