js 分享一个js的hex字符串转数字,数字转hex字符串的案例(通用与u64,s64,u32,s32,u16,s16,u8,s8,大小端)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body> <h1>我的第一个标题</h1> <p>我的第一个段落。</p> </body> <script> function parseHexToNumber(info,sign=0,endian = 0) { if(info.length%2==1)return "ERROR"; if(endian==0){ //输入的是小端,需要转化为大端 let l = info.length; let __res = ""; for(let i=0;i<l/2;i++){ __res += info.substr(2*(l/2-i-1),2); } info = __res; } if(sign==1){ let res = 0; let l = info.length/2; let fh = parseInt(info.substr(0,2),16); if(fh>127){ let __array = new Array(l); __array[0] = fh-128; for(let i=1;i<l;i++){ __array[i] = parseInt(info.substr(2*i,2),16); } for(let i=__array.length-1;i>=0;i--){ let __data = __array[i]; if(__data>0) {__array[i] = __data -1;break;} else __array[i] = 255; } for(let i=__array.length-1;i>=0;i--){ let __data = __array[i]; if(i>0){__array[i] = 256-1-__array[i];} else{__array[i] = 128-1-__array[i];} } //console.log("__array => ",__array); for(let i=0;i<__array.length;i++){ res = res + __array[i]; if(i<(__array.length-1)) res *= 256; } return -1*res; } else{ for(let i=0;i<l;i++){ let __res = parseInt(info.substr(2*i,2),16); res += __res; if(i<(l-1)) res *= 256; } } return res; }else{ let res = 0; let l = info.length/2; for(let i=0;i<l;i++){ let __res = parseInt(info.substr(2*i,2),16); res += __res; if(i<(l-1)) res *= 256; } return res; } return "ERROR"; } function parseNumberToHex(num,bytesLen=2,endian = 0) { let res = ""; let sup = ""; for(let i=0;i<bytesLen*2;i++){ sup += "0"; } if(num>0){ while(num>=1){ let __data = num%256; if(__data>15) res = res + __data.toString(16); else res = res + "0"+__data.toString(16); num = parseInt(num /256); } res += sup; }else{ let __array = new Array(bytesLen); num = -num; for(let i=0;i<bytesLen;i++){ if(num>=1){ let __data = 256 - 1 - num%256; __array[i] = __data; num = parseInt(num /256); } else{ if(i<(__array.length-1))__array[i] = 255; else __array[i]=127; } } let flag = 0; while(1){ if(flag>=bytesLen)break; if((__array[flag]+1)>255){flag++;} else{break;} } for(let i=0;i<=flag;i++){ __array[i] += 1; } if(__array[bytesLen-1]<128)__array[bytesLen-1] += 128; for(let i=0;i<bytesLen;i++){ let __data = __array[i]; if(__data>15) res = res + __data.toString(16); else res = res + "0"+__data.toString(16); } } if(endian>0){ let l = res.length; let __res = ""; for(let i=0;i<l/2;i++){ __res += res.substr(2*(l/2-i-1),2); } res = __res; } return res; } let res = 0; res= parseHexToNumber("FFFF",1); console.log("res1 => ",res); res= parseHexToNumber("0180",1); console.log("res2 => ",res); res= parseHexToNumber("ffffffff",1); console.log("res3 => ",res); res= parseNumberToHex(-1,1); console.log("parseNumberToHex res4 => ",res); res= parseNumberToHex(-1,8); console.log("parseNumberToHex res4 => ",res); res= parseNumberToHex(-1,8,1); console.log("parseNumberToHex res4 => ",res); </script> </html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构