Php char to hex

bin2hex

Возвращает ASCII-строку, содержащую шестнадцатеричное представление аргумента string . Преобразование производится побайтно, начиная с верхнего полубайта.

Список параметров

Возвращаемые значения

Возвращает шестнадцатеричное представление указанной строки.

Примеры

Пример #1 Пример использования bin2hex()

$hex = bin2hex ( ‘Hello world!’ );

var_dump ( $hex );
var_dump ( hex2bin ( $hex ));
?>

Результат выполнения данного примера:

string(24) "48656c6c6f20776f726c6421" string(12) "Hello world!"

Смотрите также

  • hex2bin() — Преобразует шестнадцатеричные данные в двоичные
  • pack() — Упаковать данные в бинарную строку

User Contributed Notes 6 notes

This function is for converting binary data into a hexadecimal string representation. This function is not for converting strings representing binary digits into hexadecimal. If you want that functionality, you can simply do this:

$binary = «11111001» ;
$hex = dechex ( bindec ( $binary ));
echo $hex ;
?>

This would output «f9». Just remember that there is a very big difference between binary data and a string representation of binary.

A good option for creating strings with binary data for saving (for example saving an sql statement to a file) into text files or php code is to do the following:

$field = bin2hex ( $field );
$field = chunk_split ( $field , 2 , «\\x» );
$field = «\\x» . substr ( $field , 0 ,- 2 );
?>

this will convert your field (binary or not) into hex and then convert the hex into a string which may be placed in a php file:

Convenient way of generating API keys

$apikey = bin2hex ( random_bytes ( 32 )); // generates 64 characters long string /^[0-9a-f]$/
?>

In an attempt to dodge spam bots I’ve seen people (including myself) hex encode their email addresses in «mailto» tags. This is the small chunk of code I wrote to automate the process:

Читайте также:  Многомерный динамический массив python

would produce the following address:
%70%65%64%72%61%6d%40%72%65%64%68%69%76%65%2e%63%6f%6d

I was just browsing the above and with a little modification,
came up with the following which I believe to be more flexible:

function bin2hex ( $data ) <
$corrected = ereg_replace ( «[^0-9a-fA-F]» , «» , $data );
return pack ( «H» . strlen ( $corrected ), $corrected );
>
?>

This will make sure that whatever you pass, even if it is padded
at the extremeties or between pairs, should return the desired data.

Here’s a function to check if a string contains any 7-bit GSM characters.

It might come useful for people working on SMS platforms.

function check_gsm ( $str )
<
$arr = array(
«0x00» , «0x01» , «0x02» , «0x03» , «0x04» , «0x05» , «0x06» , «0x07» , «0x08» , «0x09» ,
«0x0A» , «0x0B» , «0x0C» , «0x0D» , «0x0E» , «0x0F» , «0x10» , «0x11» , «0x12» , «0x13» ,
«0x14» , «0x15» , «0x16» , «0x17» , «0x18» , «0x19» , «0x1A» , «0x1B» , «0x1B0A» ,
«0x1B14» , «0x1B28» , «0x1B29» , «0x1B2F» , «0x1B3C» , «0x1B3D» , «0x1B3E» ,
«0x1B40» , «0x1B65» , «0x1C» , «0x1D» , «0x1E» , «0x1F» , «0x20» , «0x21» , «0x22» ,
«0x23» , «0x24» , «0x25» , «0x26» , «0x27» , «0x28» , «0x29» , «0x2A» , «0x2B» , «0x2C» ,
«0x2D» , «0x2E» , «0x2F» , «0x30» , «0x31» , «0x32» , «0x33» , «0x34» , «0x35» , «0x36» ,
«0x37» , «0x38» , «0x39» , «0x3A» , «0x3B» , «0x3C» , «0x3D» , «0x3E» , «0x3F» , «0x40» ,
«0x41» , «0x42» , «0x43» , «0x44» , «0x45» , «0x46» , «0x47» , «0x48» , «0x49» , «0x4A» ,
«0x4B» , «0x4C» , «0x4D» , «0x4E» , «0x4F» , «0x50» , «0x51» , «0x52» , «0x53» , «0x54» ,
«0x55» , «0x56» , «0x57» , «0x58» , «0x59» , «0x5A» , «0x5B» , «0x5C» , «0x5D» , «0x5E» ,
«0x5F» , «0x60» , «0x61» , «0x62» , «0x63» , «0x64» , «0x65» , «0x66» , «0x67» , «0x68» ,
«0x69» , «0x6A» , «0x6B» , «0x6C» , «0x6D» , «0x6E» , «0x6F» , «0x70» , «0x71» , «0x72» ,
«0x73» , «0x74» , «0x75» , «0x76» , «0x77» , «0x78» , «0x79» , «0x7A» , «0x7B» , «0x7C» ,
«0x7D» , «0x7E» , «0x7F» );

$strl = strlen ( $str );
for ( $i = 0 ; $i < $strl ; $i ++)
<
$char = ‘0x’ . bin2hex ( substr ( $str , $i , 1 ));
$pos = in_array ( $char , $arr );
if ( $pos == 1 )
<
$j ++;
>
>

Читайте также:  Php implode многомерные массивы

Источник

PHP convert string to hex and hex to string

For people that end up here and are just looking for the hex representation of a (binary) string.

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

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

Solution 3

Solution 4

Solution 5

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

JoeNguyen

Magento Tech Lead Technical Trainer

Comments

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

I check it and found out this when I use XOR to encrypt. I have the string «this is the test» , after XOR with a key, I have the result in string ↕↑↔§P↔§P ♫§T↕§↕ . After that, I tried to convert it to hex by function strToHex() and I got these 12181d15501d15500e15541215712 . Then, I tested with the function hexToStr() and I have ↕↑↔§P↔§P♫§T↕§q . So, what should I do to solve this problem? Why does it wrong when I convert this 2 style value?

Читайте также:  Index php first page

strToHex returns a string of hex — so if you XOR that directly with the ^ operator, that won’t give any good result. Maybe you could give strToHex another param being the number you want to XOR with, and XOR directly inside that function: $hex .= dechex(ord($string[$i]) ^ $MYKEYBYTE);

I thought that the problem is at hexToStr() function. Because when it convert to string, it pass the space or some special character, and make the problem

I tried hex2bin() and bin2hex(). It’s really good and solve this. but in real situation, It doesn’t. It just be right if I call bin2hex() function after encrypt by XOR the plaintext with key. But in a real situation, we usually use strToHex() after XOR , so when we decrypt by XOR the Crypt with KEY to get the plaintext, we call the hexToStr() It will get wrong result.

In the strToHex function, as an alternative to the whole dechex() and substr -2, one may just use: $hex .= sprintf(‘%02.x’, $ord);

Moeez

Moeez

Any particular approach recommended? mb_convert_encoding ? This is outside the original scope, but the hex information will be converted back into string in MSSQL, which doesn’t have a decoding function.

Источник

Оцените статью