<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script> /** * hex 16进制 * dex 10进制 */ // 10进制转16进制 function dex2hex(dec, len = 4) { let hex = ""; while( dec ) { let last = dec & 15; hex = String.fromCharCode(((last > 9) ? 55 : 48) + last) + hex; dec >>= 4; } if (len) { while(hex.length < len) hex = '0' + hex; } return hex; } // 16进制转10进制 function hex2dex(str) { return parseInt(str, 16).toString(10) } // 16进制转ASCII码 function hexCharCodeToStr(hexCharCodeStr) { let trimedStr = hexCharCodeStr.trim(); let rawStr = trimedStr.substr(0, 2).toLowerCase() === "0x" ? trimedStr.substr(2) : trimedStr; let len = rawStr.length; if (len % 2 !== 0) { alert("存在非法字符!"); return ""; } let curCharCode = ''; let resultStr = []; for (let i = 0; i < len; i = i + 2) { curCharCode = parseInt(rawStr.substr(i, 2), 16); resultStr.push(String.fromCharCode(curCharCode)); } return resultStr.join(""); } // ArrayBuffer转16进制字符串 function ab2hex(buffer) { return Array.prototype.map.call( new Uint8Array(buffer), function (bit) { return ('00' + bit.toString(16)).slice(-2) } ).join('') } // 16进制字符串转为ArrayBuffer function str2ab(str) { let buf = new ArrayBuffer(str.length / 2); let bufView = new Uint8Array(buf); for (let i = 0, strLen = str.length; i < strLen; i++) { bufView[i] = parseInt(str.slice(i * 2, i * 2 + 2), 16); } return buf; } /* 示例一 */ // 10进制数值(最初的值) const a0 = 5888888.0; console.log('a0', a0); // 10进制 [转] 16进制字符串 const a1 = dex2hex(a0); console.log('a1', a1); // 16进制字符串 [转] ArrayBuffer const a2 = str2ab(a1); console.log('a2', a2); // ArrayBuffer [转] 16进制字符串 const a3 = ab2hex(a2); console.log('a3', a3); // 16进制字符串 [转] 10进制(得到最初的值) const a4 = hex2dex(a3); console.log('a4', a4); /* 示例二 */ // 16进制的字符串(由多个16进制值拼接的字符串) const b0 = '6810BBBBBBBBBBBBBB0514AABB00'; // b0 转成 ArrayBuffer const b1 = str2ab(b0); // b1 转成 16进制字符串 const b2 = ab2hex(b1); /* 示例三 */ const test1 = [1, '1', 100, 25, 380, 10, 0, '00']; let hexStr = ''; // 16进制的字符串 test1.forEach(dex => { // 10进制转16进制 hexStr = hexStr + dex2hex(dex, 4); // 2hex }); console.log(hexStr); // 0001000100640019017C000A0000 const test2 = []; for (let i = 0; i < hexStr.length; i++) { if (!(i % 4)) { test2.push(hexStr.substr(i, 4)) } } console.log(test2); // ['0001', '0001', '0064', '0019', '017C', '000A', '0000', '0000'] const test3 = test2.map(hex => { return hex2dex(hex); }); console.log(test3) // ['1', '1', '100', '25', '380', '10', '0', '0'] /* 示例四 */ // 10进制转16进制 16进制转10进制 console.log(dex2hex('1', 2), hex2dex('01')) // 01 1 console.log(dex2hex('1', 4), hex2dex('0001')) // 0001 1 console.log(dex2hex(1, 4), hex2dex('0001')) // 0001 1 console.log(dex2hex(160, 4), hex2dex('00A0')) // 00A0 160 console.log(dex2hex(1600, 4), hex2dex('0640')) // 0640 1600 </script> </body> </html>
标签:10,console,进制,16,示例,蓝牙,let,应用,log From: https://www.cnblogs.com/zhaoxiaoying/p/16828569.html