偶虽然没写注释,但相信大家都可以看出来思路很简单。
flash as3版:
- function convert(str, n1, n2)
- {
- var arr_16 = ['0000', '0001', '0010', '0011',
- '0100', '0101', '0110', '0111',
- '1000', '1001', '1010', '1011',
- '1100', '1101', '1110', '1111'];
- var arr_32 = ['00000', '00001', '00010', '00011', '00100', '00101', '00110', '00111',
- '01000', '01001', '01010', '01011', '01100', '01101', '01110', '01111',
- '10000', '10001', '10010', '10011', '10100', '10101', '10110', '10111',
- '11000', '11001', '11010', '11011', '11100', '11101', '11110', '11111'];
- var arr_64 = ['000000', '000001', '000010', '000011', '000100', '000101', '000110', '000111', '001000', '001001', '001010', '001011', '001100', '001101', '001110', '001111',
- '010000', '010001', '010010', '010011', '010100', '010101', '010110', '010111', '011000', '011001', '011010', '011011', '011100', '011101', '011110', '011111',
- '100000', '100001', '100010', '100011', '100100', '100101', '100110', '100111', '101000', '101001', '101010', '101011', '101100', '101101', '101110', '101111',
- '110000', '110001', '110010', '110011', '110100', '110101', '110110', '110111', '111000', '111001', '111010', '111011', '111100', '111101', '111110', '111111'];
- var char_arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
- 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
- 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
- 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '!', '@'];
- var result_str = '';
- var s = '', a = '';
- var arr, b, arrt;
- switch (n1) {
- case 16 :
- arr = arr_16;
- break;
- case 32 :
- arr = arr_32;
- break;
- case 64 :
- arr = arr_64;
- break;
- }
- switch (n2) {
- case 16 :
- arrt = arr_16;
- b = 4;
- break;
- case 32 :
- arrt = arr_32;
- b = 5;
- break;
- case 64 :
- arrt = arr_64;
- b = 6;
- break;
- }
- for (var i = 0; i < str.length; i++) {
- s += arr[char_arr.indexOf(str.charAt(i))];
- }
- for (i = 0; i < b - s.length % b; i++) {
- a += '0';
- }
- s = a + s;
- for (i = 0; i < s.length; i += b) {
- result_str += char_arr[arrt.indexOf(s.substr(i, b))];
- }
- for(i = 0; i < result_str.length; i++){
- if(result_str.charAt(i) != '0'){
- return result_str.substring(i, result_str.length);
- }
- }
- }
- trace(convert('4a8b9dca84ecd3b35e681e6ea2fab3c5', 16, 64)); // 16进制 -> 64进制
- trace(convert('4a8b9dca84ecd3b35e681e6ea2fab3c5', 16, 32)); // 16进制 -> 32进制
- trace(convert('1ayVTaxePjIRVE7CWy!Hf5', 64, 16)); // 64进制 -> 16进制
php版:
- <?php
- function indexOf($arr, $e)
- {
- for($i = 0; $i < count($arr); $i++){
- if($arr[$i] == $e){
- return $i;
- }
- }
- }
- function convert($str, $n1, $n2)
- {
- $arr_16 = array('0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111');
- $arr_32 = array('00000', '00001', '00010', '00011', '00100', '00101', '00110', '00111','01000', '01001', '01010', '01011', '01100', '01101', '01110', '01111','10000', '10001', '10010', '10011', '10100', '10101', '10110', '10111','11000', '11001', '11010', '11011', '11100', '11101', '11110', '11111');
- $arr_64 = array('000000', '000001', '000010', '000011', '000100', '000101', '000110', '000111', '001000', '001001', '001010', '001011', '001100', '001101', '001110', '001111','010000', '010001', '010010', '010011', '010100', '010101', '010110', '010111', '011000', '011001', '011010', '011011', '011100', '011101', '011110', '011111','100000', '100001', '100010', '100011', '100100', '100101', '100110', '100111', '101000', '101001', '101010', '101011', '101100', '101101', '101110', '101111','110000', '110001', '110010', '110011', '110100', '110101', '110110', '110111', '111000', '111001', '111010', '111011', '111100', '111101', '111110', '111111');
- $char_arr = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f','g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v','w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L','M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '!', '@');
- $result_str = '';
- $s = '';
- $a = '';
- switch ($n1) {
- case 16 :
- $arr = $arr_16;
- break;
- case 32 :
- $arr = $arr_32;
- break;
- case 64 :
- $arr = $arr_64;
- break;
- }
- switch ($n2) {
- case 16 :
- $arrt = $arr_16;
- $b = 4;
- break;
- case 32 :
- $arrt = $arr_32;
- $b = 5;
- break;
- case 64 :
- $arrt = $arr_64;
- $b = 6;
- break;
- }
- for ($i = 0; $i < strlen($str); $i++) {
- $s .= $arr[indexOf($char_arr, $str[$i])];
- }
- for ($i = 0; $i < $b - strlen($s) % $b; $i++) {
- $a .= '0';
- }
- $s = $a . $s;
- for ($i = 0; $i < strlen($s); $i += $b) {
- $result_str .= $char_arr[indexOf($arrt, substr($s, $i, $b))];
- }
- for($i = 0; $i < strlen($result_str); $i++){
- if($result_str[$i] != '0'){
- return substr($result_str, $i);
- }
- }
- }
- echo convert('4a8b9dca84ecd3b35e681e6ea2fab3c5', 16, 64) . "\n"; // 16进制 -> 64进制
- echo convert('4a8b9dca84ecd3b35e681e6ea2fab3c5', 16, 32) . "\n"; // 16进制 -> 32进制
- echo convert('1ayVTaxePjIRVE7CWy!Hf5', 64, 16); // 64进制 -> 16进制
- ?>