请教类似parseInt('Oxa') = 10怎么求逆运算?进制转换和unicode有点晕!
发布于 7 年前 作者 jiangliqin 3701 次浏览 来自 问答

来源: 将一串字母和数字的字符串转成纯字母型的十六进制串: const encrpytStr=‘1j3kds98sd’; let res=’’; for (var i = 0; i < encrpytStr.length; i++) {

  res += String.fromCharCode(parseInt('0x' + encrpytStr[i]) + 97);转成纯字母

}

问题: 已知res十六进制串,如题目parseInt(‘Ox’+?) = B,已知B的数值,怎么求?的原始值? 这个 有点绕晕了,请教大家有啥好办法解答下?

3 回复

两个方法你弄清楚就好,注意第二个number.toString是Number的实例方法,而不是Object的

//Number.parseInt(str, radix) 参数radix含义是,传入第一个参数是几进制。返回值是十进制数
parseInt('100',2) //4
parseInt('100',10) //100
//number.toString(radix) 参数radix是你要把这个数字转化成几进制
0xa.toString(2) // "1010"
0xa.toString(10) // "10"

//如果是node直接用Buffer就好
function string2hex(str) {
	//return Buffer.from(str, 'utf8').toString('hex') 

	const ret = []

	for(let i = 0, len = str.length; i < len; i++){
		ret.push(str.charCodeAt(i).toString(16))
	}

	return ret.join('')
}

function hex2string(hexStr) {
	//return Buffer.from(hexStr, 'hex').toString('utf8')
	
	const ret = []
	const STEP = 2  	//char range in [0-9a-zA-Z]
	
	for(let i = 0, len = hexStr.length; i < len; i += STEP){
		ret.push(String.fromCharCode(Number.parseInt(hexStr.slice(i, i+STEP), 16)))
	}

	return ret.join('')
}

const str = '1j3kds98sd'
require('assert')(hex2string(string2hex(str)) == str)

数字相关自然想到用Number的方法,String往Number转,用Number的静态方法parseInt;Number往String转,用Number的实例方法 两个方法中radix,一个是对源输入格式的描述,另一个是对目标输出格式的描述

@soda-wy 谢谢哈!通过参考您的说明,(‘l’.charCodeAt(0)-97).toString(16)='b’就是求逆的过程

回到顶部