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>
复制代码

 

posted @   小城熊儿  阅读(789)  评论(0编辑  收藏  举报
编辑推荐:
· .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语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示