|
bin2hex
Convert binary data into hexadecimal representation
(PHP 4, PHP 5)
Code Examples / Notes » bin2hexmike
Unicode/multibyte capable 'bin2hex' function, inspired by v0rbiz at yahoo dot com >> http://www.php.net/manual/en/function.ord.php#42778 function unibin2hex($u) { $k = mb_convert_encoding($u, 'UCS-2LE', 'UTF-8'); $k1 = bin2hex(substr($k, 0, 1)); $k2 = bin2hex(substr($k, 1, 1)); return $k2.$k1; } Note: UCS-2LE = UCS-2 little endian; UCS-2 = UTF-16 matthew dot eastman
This function undoes it (converts back into ASCII). <?php function hex2asc($myin) { for ($i=0; $i<strlen($myin)/2; $i++) { $myout.=chr(base_convert(substr($myin,$i*2,2),16,10)); } return $myout; } ?> manithu
This function returns the string $str in htmlentity hex format (&#xnumber;). It is useful to prevent spam bots indexing your email adress. <?php function hexentities($str) { $return = ''; for($i = 0; $i < strlen($str); $i++) { $return .= '&#x'.bin2hex(substr($str, $i, 1)).';'; } return $return; } ?> example: <?php echo 'email: <address>'.hexentities('foo@bar').'</address>'; ?> will return: email: <address>foo@bar</address> the browser will show foo@bar. tehjosh
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: <?php $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. viking coder
The simplest way to do a true hex2bin (not ascii 1s & 0s). pack("H*", $hex); stroppytux
The other way to do this pedram, is to do this: $encoded= strrev(chunk_split(strrev(bin2hex("test@mail.com")), 2, '%')); php_guru ät bestof däsh inter döt net
The function hexentities($str) of the previous post is equivalent to <?= substr( chunk_split( bin2hex( " $str" ), 2, ";&#x" ), 3,-3) ?> Also, I think that the <address> tag should be used for the whole paragraph (usually at document foot) and not as shortcut for <span class=email> or so (although it is an %inline; element), see e.g. http://www.w3.org/TR/html4/struct/global.html#h-7.5.6 rt
The easiest way of all to convert a hex string to ascii is: <? pack("H*", $your_hex_string); ?> admin
Some gave a function to convert a hex code back into a simple text (human readable ASCII :P) Some else gave a function that makes use of bin2hex to convert URLs into something like %12%34%56 Here is a function to go from the form %12%34%56 back into ASCII Note that this function can easily be changed in order to transform any hex code into ASCII <? function _hex2text($str) { $str = explode('%', $str); array_shift($str); $nmlstr = ''; foreach($str as $hexstr) { $nmlstr .= chr(base_convert($hexstr, 16, 10)); } return $nmlstr; } ?> 'hope this helps :) Regards -Tsuna nilzie
Since PHP only has a way to convert a real binary string into hex, couldn't I find a function that can convert binary information written in ascii (like 0110). This function will convert that <? function asciibin2hex($str) { $str = str_replace(" ", "", $str); //delete some probably spaces //Binary to HEX list $binary['0000'] = "0"; $binary['0001'] = "1"; $binary['0010'] = "2"; $binary['0011'] = "3"; $binary['0100'] = "4"; $binary['0101'] = "5"; $binary['0110'] = "6"; $binary['0111'] = "7"; $binary['1000'] = "8"; $binary['1001'] = "9"; $binary['1010'] = "a"; $binary['1011'] = "b"; $binary['1100'] = "c"; $binary['1101'] = "d"; $binary['1110'] = "e"; $binary['1111'] = "f"; //make sets of 4 for( ; ; ) { $calc = strlen($str) / 4; if(is_numeric($calc)&&(intval($calc)==floatval($calc))) { break; } else { $str .= 0; } } //translate binary to hex for($i = 0 ; $i < strlen($str) ; $i = $i + 4) { $set = substr($str, $i, 4); $inhex .= $binary[$set]; } return $inhex; } //Examples: echo asciibin2hex("101101011100"); //prints: b5c echo asciibin2hex("1011 1000 1111 1100") //prints: b8fc echo asciibin2hex("1000 1011 1101 001") //prints: 8bd2 ?> I hope I didn't make it too hard for myself writing this all, but hé, it works :) mkr
Ok, this is a better version than my previous poor example. Running this in shell creates a progress indicator. Very useful if used when parsing large log files for instance. #!/usr/bin/php4 -q <? // Displays a progress indicator function progress($line) { global $last_len; $del_char = pack("H" . 2, "7F"); $line_len = strlen($line); $del_chars=(isset($last_len)) ? $last_len : $line_len; $last_len = $line_len; return str_repeat($del_char, ($del_chars)).$line; } // demo code: for($i=0;$i<100;$i++) { sleep(1); echo progress("i is now: $i out of 100"); } ?> mhspam
My version of quoted-printable mail subject converting function (maybe not as effective, but preserving characters which don't need conversion). Martin <?php // Transfer mail subject into Quoted Printable encoding function mail_quote_subj($str, $charset){ $out = ''; for($i = 0; $i < strlen($str); $i++){ $out .= (ord($str[$i]) > 127) ? "=" . bin2hex($str[$i]) : $str[$i]; } return "=?$charset?Q?".$out."?="; }; ?> t0rus
modified version of Thoth's hexbin and binhex to convert any size numbers (original doesn't take more than integer - 32bit) <? function hexbin($hex){ $bin=''; for($i=0;$i<strlen($hex);$i++) $bin.=str_pad(decbin(hexdec($hex{$i})),4,'0',STR_PAD_LEFT); return $bin; } function binhex($bin){ $hex=''; for($i=strlen($bin)-4;$i>=0;$i-=4) $hex.=dechex(bindec(substr($bin,$i,4))); return strrev($hex); } ?> antonioalcorn
In response to Patrik: A simpler way to print a number in binary is to use base_convert(). <? echo base_convert($bin, 10, 2); ?> If you need it to print all 32 bits (as your function does) you can just pad it out: <? echo str_pad(base_convert($bin, 10, 2), 32, '0', STR_PAD_LEFT); ?> The conversion is from base 10 because when $bin is passed to base_convert(), it is converted to a string, and the default representation is in decimal. Hope this helps. pedram
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: <?php function hex_encode ($email_address) { $encoded = bin2hex("$email_address"); $encoded = chunk_split($encoded, 2, '%'); $encoded = '%' . substr($encoded, 0, strlen($encoded) - 1); return $encoded; } ?> so for example: <a href="mailto:<?=hex_encode("pedram@redhive.com")?>">email me</a> would produce the following address: %70%65%64%72%61%6d%40%72%65%64%68%69%76%65%2e%63%6f%6d -pedram maxg
I wrote the function that is useful for sending emails for example in cyrillic encoding (wondows-1251, koi8-r and so on). It converts every symbol in the string into hexadecimal presentation with "=" symbol as delimiter. For example, the string "Ðåãèñòðàöèîííûé êîä äëÿ" will look like that: =d0=e5=e3=e8=f1=f2=f0=e0=f6=e8=ee=ed=ed=fb=e9=20=ea=ee=e4=20=e4=eb=ff I use it for encoding email subject, but it could be modified for anything else. <?php function hex4email ($string,$charset) { $string=bin2hex ($string); $encoded = chunk_split($string, 2, '='); $encoded=preg_replace ("/=$/","",$encoded); $string="=?$charset?Q?".$encoded."?="; return $string; } ?> tightcode
I was just browsing the above and with a little modification, came up with the following which I believe to be more flexible: <?php 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. thoth
I thought it'll give me an "F" if i give it a "1111"... Here's something to convert a binary-string into a hex-string and other direction too: <?php function hexbin($hex) { $bin = decbin(hexdec($hex)); return $bin; } function binhex($bin) { $hex = dechex(bindec($bin)); return $hex; } ?> simple, isn't it? patrik
I needed a little function that will print the binary as a string, here it comes. <?php function bin2string($bin) { $res = ""; for($p=31; $p >= 0; $p--) { $res .= ($bin & (1 << $p)) ? "1" : "0"; } return $res; } ?> php
I have found the above quoted-printable encoding function to be extremely useful, and thank maxg for making a great function that is not already included in PHP. (Pity it's hidden all the way over here when it could be found more easily in quoted_printable_decode() ) However, there is one missing character in the code that needs to be included: Right after the ?Q? there needs to be an extra equal sign in order for the very first character to be translated by the e-mail software. $string = "=?$charset?Q?=" . $encoded . "?="; is correct. I don't yet have enough experience to speak for other caveats or improvements, but your mileage may vary depending on the e-mail server. - Luke ratfactor
I also wished to have the ability to translate a string containing a binary number ('1101') to a string containing a hexadecimal number ('d'). Here is my function: function strbin2hex($bin){ $last = strlen($bin)-1; for($i=0; $i<=$last; $i++){ $x += $bin[$last-$i] * pow(2,$i); } return dechex($x); } Example: strbin2hex('1101'); // returns 'd' I also added some optional features to my function (zero padding and upper case hex letters): function strbin2hex($bin, $pad=false, $upper=false){ $last = strlen($bin)-1; for($i=0; $i<=$last; $i++){ $x += $bin[$last-$i] * pow(2,$i); } $x = dechex($x); if($pad){ while(strlen($x) < intval(strlen($bin))/4){ $x = "0$x"; } } if($upper){ $x = strtoupper($x); } return $x; } Examples: strbin2hex('11110101', true, true); // returns 'F5' strbin2hex('00001011', true, true); // returns '0B' matt
Hopefully this helps someone... It just displays an html representation of hex data, much like a hex viewer would. Matt <?php function hexview($data){ $bytePosition = $columnCount = $lineCount = 0; $columns = 8; $dataLength = strlen($data); $return = array(); $return[] = '<table border="1" cellspacing="0" cellpadding="2">'; for($n = 0; $n < $dataLength; $n++){ $lines[$lineCount][$columnCount++] = substr($data, $n, 1); if($columnCount == $columns){ $lineCount++; $columnCount = 0; } } foreach($lines as $line){ $return[] = '<tr><td align="right">'.$bytePosition.': </td>'; for($n = 0; $n < $columns; $n++){ $return[] = '<td>'.strtoupper(bin2hex($line[$n])).'</td>'; } $return[] = '<td> </td>'; for($n = 0; $n < $columns; $n++){ $return[] = '<td>'.(htmlentities($line[$n]) ? htmlentities($line[$n]) : ' ').'</td>'; } $return[] = '</tr>'; $bytePosition = $bytePosition + $columns; } $return[] = '</table>'; return implode('', $return); } ?> aidan
hexdump() is a function for "dumping" packets or binary output from servers. See the below link for more information. http://aidanlister.com/repos/v/function.hexdump.php brams006
Here's a modified version of an earlier post (asc2bin and bin2asc) to convert an incoming ascii string to hex and out again. For example, this is really useful if you want to insert data into a mySQL database which contains both escaped and non-escaped characters. For example, if you want to store code snibbets in a mySQL text field: printf("here's some \"text\"."); If you INSERT this into mySQL, it probably won't come out in friendly executable format, and you can't escape all double-quotes, nor can you strip out all the slashes. One solution is to just convert the string to hex, store it in hex, then convert back to ascii before using it in some way: function asc2hex ($temp) { $len = strlen($temp); for ($i=0; $i<$len; $i++) $data.=sprintf("%02x",ord(substr($temp,$i,1))); return $data; } function hex2asc($temp) { $len = strlen($temp); for ($i=0;$i<$len;$i+=2) $data.=chr(hexdec(substr($temp,$i,2))); return $data; } francisco ffaria
function to search a character in a normal string change this for a hexadecimal and take the especifical char code in hexa and replace this char and return the string <?php function hex_replace($pCaracter,$sCaracter,$conteudo) { $pHex = bin2hex($pCaracter); $sHex = bin2hex($sCaracter); $tam = strlen($conteudo); for($i = 0; $i <= $tam; $i++) { $cont = bin2hex(substr($conteudo,$i,1)); if ($cont == $pHex) { $cont = $sHex; $hex .= $cont; } } for ($i=0;$i<strlen($hex);$i+=2) $bin .= chr(hexdec(substr($hex,$i,2))); return $bin; } ?> by from a litle brazilian. :-P mike
Easier hex2bin function: <?php function hex2bin($data) { $len = strlen($data); return pack("H" . $len, $data); } ?> lihong dot wei
Convert special characters(inclusiv line break) in a string into hexadecimal characters function spec2hex($str) { $result = ''; for($i = 0; $i < strlen($str); $i++) { if(ord(substr($str, $i, 1)) > 127 || ord(substr($str, $i, 1)) == 10){ $result .= '&#x'.bin2hex(substr($str, $i, 1)).';'; } else{ $result .= substr($str, $i, 1); } } return $result; } gherson
As is, the <?php function hex2bin($hex_data){ return (DecBin(HexDec($hex_data))); } ?> suggested above will return actual ones and zeroes as opposed to a binary string interpreted as ascii. E.g., "11000010110001001100011" gets returned instead of "abc". frederic dot surleau
Another version for hex2bin : <?php function hex2bin($hexdata){ for( $i = 0; $i < strlen( $hexdata ); $i += 2 ) eval( '$bindata .= "\x' . substr( $hexdata, $i, 2 ) . '";' ); return $bindata;} ?> j_lozinskit
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: <?php $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: FFFFFFFF -> \xFF\xFF\xFF\xFF andreas.schmeiler
<?php function hex2bin($hexdata) { for ($i=0;$i<strlen($hexdata);$i+=2) { $bindata.=chr(hexdec(substr($hexdata,$i,2))); } return $bindata; } ?> |
Change Languageaddcslashes addslashes bin2hex chop chr chunk_split convert_cyr_string convert_uudecode convert_uuencode count_chars crc32 crypt echo explode fprintf get_html_translation_table hebrev hebrevc html_entity_decode htmlentities htmlspecialchars_decode htmlspecialchars implode join levenshtein localeconv ltrim md5_file md5 metaphone money_format nl_langinfo nl2br number_format ord parse_str printf quoted_printable_decode quotemeta rtrim setlocale sha1_file sha1 similar_text soundex sprintf sscanf str_getcsv str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count strcasecmp strchr strcmp strcoll strcspn strip_tags stripcslashes stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk strpos strrchr strrev strripos strrpos strspn strstr strtok strtolower strtoupper strtr substr_compare substr_count substr_replace substr trim ucfirst ucwords vfprintf vprintf vsprintf wordwrap |