js字符串与十六进制之间的转换
在寻找加密解密的时候看到一个方法,代码图片转换。原理为:字符可以转为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,这上边有详细一点的方法。
js字符串与十六进制之间的转换的更多相关文章
- JS字符串和数组之间的转换
1.字符串转换为数组 var string = '123,456,789'; var stringResult = string.split(','); console.log(stringResul ...
- 字符串与Objec之间互相转换
字符串与Objec之间互相转换可通过json实现. JSON.parse(str);// 字符串转Json Object JSON.stringify(obj);// Obj转字符串
- js时间和时间戳之间如何转换(汇总)
js时间和时间戳之间如何转换(汇总) 一.总结 一句话总结: 1.js中通过new Date()来获取时间对象, 2.这个时间对象可以通过getTime()方法获取时间戳, 3.也可以通过getYea ...
- kotlin字符串和数字之间的转换和人机交互
继续基础学习~ 字符串和数字之间的转换 那如何转换呢,其实很简单: 编译木有报错,但是运行: 所以这里了解下. 人机交互 看这标题貌似高端的,其实也就是程序可以接受键盘的输入啦,下面开始: 首先提示用 ...
- Js字符串与十六进制的相互转换
开发过程中,字符串与十六进.二进制之间的相互转换常常会用到,尤其是涉及到中文的加密时,就需要把中文转换为十六进制.下面说说具体的转换方法. 1.字符串转换为十六进制 主要使用 charCodeAt() ...
- Js字符串与十六进制的相互转换 【转】
开发过程中,字符串与十六进.二进制之间的相互转换常常会用到,尤其是涉及到中文的加密时,就需要把中文转换为十六进制.下面说说具体的转换方法. 1.字符串转换为十六进制 主要使用 charCodeAt() ...
- JS字符串与十六进制的相互转换(转载)
原文链接:http://www.cnblogs.com/zack-/archive/2012/04/17/website_using.html 1.字符串转换为十六进制 主要使用 charCodeAt ...
- Swift_ios_二进制,十进制,十六进制之间的转换
这里所说的转换,并不是Swift中字面量之间的转换.如果是字面量之间的转换,ios系统中已经自动帮我们转换了. 例如let number1:Int = 8let number2:Int = 0b100 ...
- Qt中字符串和数值之间的转换
来自<Qt5.9 C++开发指南> 普通数值和字符串之间的转换 一.从字符串转换为数值 QString类从字符串转换为整数的函数有: int QString::toInt(bool *ok ...
随机推荐
- (一)新建一个javaweb项目
一.为了不影响其他项目,可以重新选择一个新的工作目录:swith workspace 二.为了尽可能统一项目,所使用的编程环境,包括:Tomcat.JRE都是项目组自己的,所以在新建项目的时候要注意选 ...
- django根据不同app配置相应的log文件
django根据不同app配置相应的log文件 settings.py # django logging LOG_PATH = "/var/log/blog/" LOGGING = ...
- C#——传值参数(3)
上篇文章我与大家共同学习了 值参数——引用类型这次与大家共同学习 传值参数--引用类型,不创建新对象,只操作对象这是个思维导图:我们仍需记住:1.值参数创建变量的副本 2.对值参数的改变不会影响变量的 ...
- 移动构造和移动赋值与std::move
------------------------------------移动构造------------------------------------------ 传统的深拷贝深赋值 对于类中,含有 ...
- 数据库路由中间件MyCat - 使用篇(2)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 基本概念 3. 分片 3.1 分片节点(dataNode) 表被水平切分后,每个分片表所在的数据库就是一个分 ...
- js基础(创建标签)
创建标签 var divBox1 = document.getElementById('box1'); var p = document.createElement('p'); p.innerHTML ...
- uva11357 Matches
Matches UVA - 11375 题意: 给你n根matches, 你可以拼出多少个数字0~9. 不必全部用完. 解题思路: 1. 计数题, 本题可以用图来理解. 把"已经使用了i根m ...
- codevs3145 汉诺塔游戏
3145 汉诺塔游戏 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 白银 Silver 题目描述 Description 汉诺塔问题(又称为河内塔问题),是一个大家熟知 ...
- IT兄弟连 Java语法教程 Java的发展历程
只有少数几种编程语言对程序设计带来过根本性的影响.其中,Java的影响由于迅速和广泛而格外突出.可以毫不夸张的说,1995年Sun公司发布的Java1.0给计算机程序设计领域带来了一场变革.这场变革迅 ...
- Nacos深入浅出(八)
Nacos-spring-context.java 感觉这个后台要比之前的Nacos复杂多了,涉及到很多基础的概念,慢慢看,这个后面慢慢更新解析过程 看到他的目录结构一个是基于注解,一个是XML的解析 ...