在寻找加密解密的时候看到一个方法,代码图片转换。原理为:字符可以转为16进制,与图片RGB的一个R/G/B相对应,即一个像素点可容纳3个字符(注:Canvas的RGBA,透明度A似乎不能使用,使用后,RGB会有所变化,造成无法正确解码。)网址为http://www.cnblogs.com/wangxinsheng/p/4381754.html。

中间在代码转化为图片时有用到stringToHex()方法和在图片转化为代码的时候有使用hexToString()方法。很显然,直接复制代码是不能实现相关的功能的,必须要有这两个方法封装的函数。在网上又搜了一下这两个函数,当然,字符串转化为十六进制的时候是没有问题的,代码为:

function stringToHex(str) {

  var val = "";

  for(var i = 0; i < str.length; i++) {

    if(val == "") { val = str.charCodeAt(i).toString(16); } else { val += "," + str.charCodeAt(i).toString(16); }
  }
  return val;
}

不过找到的十六进制转化为字符串的函数试验了一下,不大对。找到的代码如下:

function hexToString(str){

    var val="";

    var arr = str.split(",");

    for(arr i = 0; i < arr.length; i++){

      val += arr[i].fromCharCode(i);

    }

    return val;

  }

formCharCode()方法:静态方法,任务是接受一或多个字符编码,然后将它们转换为一个字符串,本质上与实例方法charCodeAt()执行相反的操作。charCodeAt():以字符串的形式返回给定位置的那个字符的字符编码。说是不对,指的是在stringToHex()方法中调用charCodeAt()方法之后有调用了toString(16)方法将十进制字符编码转化为了十六进制,但是stringToHex()的结果在hexToString()方法中并没有将十六进制转化为十进制就直接使用fromCharCode()方法,fromCharCode()方法会直接把对象当做十进制来转换,这明显不是十六进制转化为字符编码。另外,fromCharCode()的用法也不是 arr[i].fromCharCode(i);这种,它的使用方法为String.fromCharCode(arr[i]);这个hexToString()被我稍微改了一下,代码如下:

function hexToString(str){

    var val="";

    var arr = str.split(",");

    for(arr i = 0; i < arr.length; i++){

      val += String.fromCharCode(parseInt(arr[i],16));

    }

    return val;

  }

其中parseInt(arr[i],16)是将十六进制转化为十进制。

当然,这种比较适合知道是十六进制的情况下调用这个hexToString()方法,要是十进制的话这个函数也会默认为十六进制。

如果是需要先对传入的参数做一个判断,这一块https://yq.aliyun.com/ziliao/87466或者是http://www.cnblogs.com/cutone/p/6007031.html,这上边有详细一点的方法。

最新文章

  1. Hive:Spark中如何实现将rdd结果插入到hive1.3.0表中
  2. mysql 链接失败(ERROR 1045 (28000): Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: YES))
  3. MVC使用Membership配置
  4. 对iOS中Delegate的理解
  5. GitHub 操作流程示例
  6. SQL例题合集
  7. HDU-4455 Substrings(DP)
  8. golang-mongodb范例
  9. php非递归无限级分类.
  10. Java基础学习笔记2
  11. iOS开发那些事-iOS6苹果地图有用开发
  12. Python3常用网络编程模块介绍
  13. JSF生命周期&amp;Facelets的生命周期
  14. 可遇不可求的Question之MySqlClient的Guid 类型的映射篇
  15. Flask block继承和include包含
  16. 【实践报告】Linux实践二
  17. ubuntu系列-安装jdk以及eclipse(for C++)
  18. Googel 浏览器 模拟发送请求工具--Advanced REST Client
  19. 第一章:AI人工智能 の 数据预处理编程实战 Numpy, Pandas, Matplotlib, Scikit-Learn
  20. Intellij IDEA创建maven项目无java文件问题

热门文章

  1. Oracle 表连接方式(1)---
  2. php file_get_contents超时处理
  3. 51Nod - 1154 回文串划分(最少回文串dp)
  4. ASP.NET学习笔记(三)ASP Global.asa 文件
  5. HDU 6003 Problem Buyer【小根堆】
  6. pytest框架(一)
  7. python入门的基本历程
  8. SpringBoot(1)—启动原理之SpringApplication对象的创建
  9. 小白入门AI教程:教你快速搭建大数据平台『Hadoop+Spark』
  10. Nacos深入浅出(六)