十进制数组转成以空格隔开的十六进制字符串
[1,2,3,4,5] => ‘01 02 03 04 05’
const decArrayToHexStr = (array) => {
var hexStr = ""
for(var i = 0; i < array.length; i++) {
var str = array[i].toString(16).toUpperCase();
if (str.length < 2) {
str = "0" + str
}
hexStr = hexStr + str + " "
}
return hexStr.substr(0, hexStr.length - 1)
}
以空格隔开的十六进制字符串转为十进制数组
‘01 02 03 04 05’ ==> [1, 2, 3, 4, 5]
const hexStrToDecArray = (str) => {
var strArray = str.split(" ")
var decArray = []
for(var i = 0; i < strArray.length; i++) {
decArray.push(parseInt(strArray[i], 16))
}
return decArray
}
二进制字符串转十六进制
const bin_to_hex(str) {
let hex_array = [
{key:0,val:"0000"},
{key:1,val:"0001"},
{key:2,val:"0010"},
{key:3,val:"0011"},
{key:4,val:"0100"},
{key:5,val:"0101"},
{key:6,val:"0110"},
{key:7,val:"0111"},
{key:8,val:"1000"},
{key:9,val:"1001"},
{key:'a',val:"1010"},
{key:'b',val:"1011"},
{key:'c',val:"1100"},
{key:'d',val:"1101"},
{key:'e',val:"1110"},
{key:'f',val:"1111"}
]
let value = ''
let list=[]
if((str.length % 4) !== 0){
let a = "0000"
let b=a.substring(0,4-str.length%4)
str = b.concat(str)
}
while (str.length > 4) {
list.push(str.substring(0, 4))
str = str.substring(4);
}
list.push(str)
for(let i=0;i<list.length;i++){
for(let j=0;j<hex_array.length;j++){
if(list[i]==hex_array[j].val){
value = value.concat(hex_array[j].key)
break
}
}
}
return value
}
十六进制字符串转二进制
const hex_to_bin = (str) => {
let hex_array = [
{key:0,val:"0000"},
{key:1,val:"0001"},
{key:2,val:"0010"},
{key:3,val:"0011"},
{key:4,val:"0100"},
{key:5,val:"0101"},
{key:6,val:"0110"},
{key:7,val:"0111"},
{key:8,val:"1000"},
{key:9,val:"1001"},
{key:'a',val:"1010"},
{key:'b',val:"1011"},
{key:'c',val:"1100"},
{key:'d',val:"1101"},
{key:'e',val:"1110"},
{key:'f',val:"1111"}
]
let value=""
for(let i = 0; i < str.length; i++) {
for(let j = 0; j < hex_array.length; j++){
if(str.charAt(i).toLowerCase() == hex_array[j].key){
value = value.concat(hex_array[j].val)
break
}
}
}
return value
}
异或运算
const ExclusiveOR = (a, b) => {
let A = hex_to_bin(a)
let B = hex_to_bin(b)
let o = "00000000000000000000000000000000000"
if (A.toString().length > B.toString().length) {
let c = A.toString().length - B.toString().length
B = o.substr(0,c).concat(B)
} else if (A.toString().length < B.toString().length) {
let c = B.toString().length - A.toString().length
A = o.substr(0,c).concat(A)
}
let d = ""
for (let i = 0; i < A.toString().length; i++) {
if (A.toString()[i]==B.toString()[i]) {
let q="0"
d = d.concat(q)
} else{
let p="1"
d = d.concat(p)
}
}
// 上面的2进制转16进制方法
return bin_to_hex(d)
}
希望能够帮大家!