回覆列表
  • 1 # Echa攻城獅

    js的進位制轉換, 分為2進位制,8進位制,10進位制,16進位制之間的相互轉換, 我們直接利用 物件.toString()即可實現:

    執行下面程式碼

    //10進位制轉為16進位制(10).toString(16) // =>"a"

    //8進位制轉為16進位制(012).toString(16) // =>"a"

    //16進位制轉為10進位制(0x16).toString(10) // =>"22"

    //16進位制轉為8進位制(0x16).toString(8) // =>"26"

    //10進位制轉為2進位制 //=>(1111).toString(2) // => "10001010111"

    //8進位制轉為2進位制 //=>(01111).toString(2) //=>"1001001001"

    //16進位制轉為2進位制 //=>(0x16).toString(2) // => "10110"

      如果要處理2進位制到10進位制,16進位制到10進位制,8進位制到10進位制, 需要用了paresInt這個方法:

    執行下面程式碼

    //2進位制到10進位制;parseInt(10,2) //=>2

    //2進位制到10進位制;parseInt(100,2) //=>4

    //16進位制到10進位制parseInt(12, 16) //=>18

    //8進位制到10進位制parseInt(12,8); //=>10

      進位制轉換

      如果要實現進位制之間的轉換, 可以利用parseInt方法, 先轉化為10進位制, 然後再利用toString(引數), 轉化成不同的進位制;

      利用toString和parseInt方法可以實現一個進位制轉化的工具:

    執行下面程式碼

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">

    <head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無標題文件</title>

    </head>

    <body>

    <script language="javascript"> function test() { var num=document.getElementById("in").value; var type=document.getElementById("title"); var tynum,to; for(var i=0;i<type.length;i++) { if(type[i].selected) tynum=parseInt(type[i].value); } switch(tynum) { case(1):to=parseInt(num).toString(2);break; case(2):to=parseInt(num).toString(8);break; case(3):to=parseInt(num).toString(16);break; case(4):to=parseInt(num,2);break; case(5):to=parseInt(num,8);break; case(6):to=parseInt(num,16);break; case(7):to=parseInt(num,2).toString(8);break; case(8):to=parseInt(num,8).toString(2);break; case(9):to=parseInt(num,2).toString(16);break; case(10):to=parseInt(num,16).toString(2);break; case(11):to=parseInt(num,8).toString(16);break; case(12):to=parseInt(num,16).toString(8);break; } if(isNaN(to)) to="輸入非法字元了哦" document.getElementById("out").value=to; }</script> <select name="title"> <option value="1">十進位制轉二進位制</option> <option value="2">十進位制轉八進位制</option> <option value="3">十進位制轉十六進位制</option> <option value="4">二進位制轉十進位制</option> <option value="5">八進位制轉十進位制</option> <option value="6">十六進位制轉十進位制</option> <option value="7">二進位制轉八進位制</option> <option value="8">八進位制轉二進位制</option> <option value="9">二進位制轉十六進位制</option> <option value="10">十六進位制轉二進位制</option> <option value="11">八進位制轉十六進位制</option> <option value="12">十六進位制轉八進位制</option> </select><br /> <input type="text" /><br> <input type="text" /><br/> <input type="button" value="change" onclick="test()" /> <font color="#FF0000">*注:存在非法字元時,我們只截斷有效字元進行轉換</font>

    </body>

    </html>

      簡單加密解密

      把字串轉化成unicode, 然後再把unicode轉成不同的進位制 , 實現程式碼加密處理:

    執行下面程式碼

    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="utf-8"/>

    <title></title>

    </head>

    <body>

    <script> function en(code, h){ //簡單的jS加密解密<br>//code為對應的字串,h為(2,8,10,16)就是要轉成的幾進位制<br>function en(code, h) { var monyer = new Array();var i; for(i=0;i<code.length;i++) monyer+=code.charCodeAt(i).toString(h)+"_";//就是把字串轉成ascll碼,然後再轉成你想的幾進位制 return monyer; }; function de(code, h) { var i,s="",code = code.split("_"); for(i=0;i<code.length;i++) { s += String.fromCharCode(parseInt(code[i],h)); }; return s }; en("1哇哈哈",8) //=> "61_52307_52310_52310_" de("61_52307_52310_52310_",8) //=> "1哇哈哈

    </script>

    </body>

    </html>

      零寬字元

      利用零寬字元的零寬度, 我們把所有的字串轉化成二進位制, 然後利用零寬字元進行表示, 那麼生成的字串長度就會為0, 主要反編譯即可還原,

    執行下面程式碼

    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="utf-8"/>

    <title></title>

    </head>

    <body>

    <script>

    function en(str) { var rep = { "00": "\u200b", "01": "\u200c", "10": "\u200d", "11": "\uFEFF" }; str = str.replace(/[^\x00-\xff]/g, function (a) { // 轉碼 Latin-1 編碼以外的字元。 return escape(a).replace("%", "\\"); }); str = str.replace(/[\s\S]/g, function (a) { // 處理二進位制資料並且進行資料替換 a = a.charCodeAt().toString(2); a = a.length < 8 ? Array(9 - a.length).join("0") + a : a; return a.replace(/../g, function (a) { return rep[a]; }); }); return str; } ; function de(str) { return unescape(str.replace(/.{4}/g, function (a) { var rep = {"\u200b": "00", "\u200c": "01", "\u200d": "10", "\uFEFF": "11"}; return String.fromCharCode(parseInt(a.replace(/./g, function (a) { return rep[a] }), 2)).replace(/\\/g,"%") })) } var str = en("1哇哈哈"); console.log(str.length); console.log(de(str));

    </script>

    </body>

    </html>

    總結:

  • 2 # 李老師tome

    我知道的前端javascript的16進位制可用於兩個方面:

    字元實體

    顏色表

    字元實體

    在html中有一類字元被稱為轉義序列(escape sequence),它們並不是編碼。以三種符號「&」「&#」「&#x」開頭。

    從html4開始,後面兩行會被瀏覽器解析為“中國”。有興趣的可以去試試,所以瞭解了這些,我們可以透過JS去將中文字元翻譯成這些程式碼,防止惡意爬蟲解析。

    顏色表

    這個是主要是因為CSS中顏色表用的就是以「#」開頭的16進位制程式碼表示的。例如「#FFFFFF」就會被解析為白色。在一些線上遊戲或者動畫效果中,可以使用JS變換顏色。

  • 3 # 莞漂徐哥

    利用零寬字元的零寬度, 我們把所有的字串轉化成二進位制, 然後利用零寬字元進行表示, 那麼生成的字串長度就會為0, 主要反編譯即可還原,

  • 中秋節和大豐收的關聯?
  • 誰知道古天樂演的電影《甜言蜜語》中的那段英文音樂插曲哪能找到?