这篇文章主要介绍了 JS 中的进制转换以及作用的相关资料, 非常不错,具有参考借鉴价值,需要的朋友可以参考下
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
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" id="title" style="width:152px;">
- <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" id="in" />
- <br>
- <input type="text" id="out" />
- <br/>
- <input type="button" value="change" onclick="test()" />
- <font color="#FF0000" style="font-size:12px;">
- *注:存在非法字符时,我们只截断有效字符进行转换
- </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>
以上所述是小编给大家介绍的 JS 中的进制转换以及作用的全部叙述,希望对大家有所帮助,如果大家想了解更多内容,敬请关注 phperz 网站!
来源: http://www.phperz.com/article/17/0304/264574.html