JavaScript Base64/Hex Encoder/Decoder.(ZT)

该博客主要介绍了使用客户端JavaScript进行Base64和Hex编码与解码的方法。通过定义多个函数,如encodeBase64、decodeBase64、encodeHex、decodeHex等,实现了数据的编解码操作,并在HTML表单中提供了相应的按钮来触发这些功能。
部署运行你感兴趣的模型镜像

<html>
<head>
<title>Base64 and Hex Encoding and Decoding</title>
<meta name="Description" content="Encodes or decodes data in Base64 or Hex using client side JavaScript.">
<meta name="Keywords" content="encode, decode, base64, base 64, javascript">
<script language=javascript type="text/javascript">
<!--
var END_OF_INPUT = -1;

var base64Chars = new Array(
    'A','B','C','D','E','F','G','H',
    'I','J','K','L','M','N','O','P',
    'Q','R','S','T','U','V','W','X',
    'Y','Z','a','b','c','d','e','f',
    'g','h','i','j','k','l','m','n',
    'o','p','q','r','s','t','u','v',
    'w','x','y','z','0','1','2','3',
    '4','5','6','7','8','9','+','/'
);

var reverseBase64Chars = new Array();
for (var i=0; i < base64Chars.length; i++){
    reverseBase64Chars[base64Chars[i]] = i;
}

var base64Str;
var base64Count;
function setBase64Str(str){
    base64Str = str;
    base64Count = 0;
}
function readBase64(){   
    if (!base64Str) return END_OF_INPUT;
    if (base64Count >= base64Str.length) return END_OF_INPUT;
    var c = base64Str.charCodeAt(base64Count) & 0xff;
    base64Count++;
    return c;
}
function encodeBase64(str){
    setBase64Str(str);
    var result = '';
    var inBuffer = new Array(3);
    var lineCount = 0;
    var done = false;
    while (!done && (inBuffer[0] = readBase64()) != END_OF_INPUT){
        inBuffer[1] = readBase64();
        inBuffer[2] = readBase64();
        result += (base64Chars[ inBuffer[0] >> 2 ]);
        if (inBuffer[1] != END_OF_INPUT){
            result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30) | (inBuffer[1] >> 4) ]);
            if (inBuffer[2] != END_OF_INPUT){
                result += (base64Chars [((inBuffer[1] << 2) & 0x3c) | (inBuffer[2] >> 6) ]);
                result += (base64Chars [inBuffer[2] & 0x3F]);
            } else {
                result += (base64Chars [((inBuffer[1] << 2) & 0x3c)]);
                result += ('=');
                done = true;
            }
        } else {
            result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30)]);
            result += ('=');
            result += ('=');
            done = true;
        }
        lineCount += 4;
        if (lineCount >= 76){
            result += ('/n');
            lineCount = 0;
        }
    }
    return result;
}
function readReverseBase64(){  
    if (!base64Str) return END_OF_INPUT;
    while (true){     
        if (base64Count >= base64Str.length) return END_OF_INPUT;
        var nextCharacter = base64Str.charAt(base64Count);
        base64Count++;
        if (reverseBase64Chars[nextCharacter]){
            return reverseBase64Chars[nextCharacter];
        }
        if (nextCharacter == 'A') return 0;
    }
}

function ntos(n){
    n=n.toString(16);
    if (n.length == 1) n="0"+n;
    n="%"+n;
    return unescape(n);
}

function decodeBase64(str){
    setBase64Str(str);
    var result = "";
    var inBuffer = new Array(4);
    var done = false;
    while (!done && (inBuffer[0] = readReverseBase64()) != END_OF_INPUT
        && (inBuffer[1] = readReverseBase64()) != END_OF_INPUT){
        inBuffer[2] = readReverseBase64();
        inBuffer[3] = readReverseBase64();
        result += ntos((((inBuffer[0] << 2) & 0xff)| inBuffer[1] >> 4));
        if (inBuffer[2] != END_OF_INPUT){
            result +=  ntos((((inBuffer[1] << 4) & 0xff)| inBuffer[2] >> 2));
            if (inBuffer[3] != END_OF_INPUT){
                result +=  ntos((((inBuffer[2] << 6)  & 0xff) | inBuffer[3]));
            } else {
                done = true;
            }
        } else {
            done = true;
        }
    }
    return result;
}

var digitArray = new Array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');
function toHex(n){
    var result = ''
    var start = true;
    for (var i=32; i>0;){
        i-=4;
        var digit = (n>>i) & 0xf;
        if (!start || digit != 0){
            start = false;
            result += digitArray[digit];
        }
    }
    return (result==''?'0':result);
}

function pad(str, len, pad){
    var result = str;
    for (var i=str.length; i<len; i++){
        result = pad + result;
    }
    return result;
}

function encodeHex(str){
    var result = "";
    for (var i=0; i<str.length; i++){
        result += pad(toHex(str.charCodeAt(i)&0xff),2,'0');
    }
    return result;
}

function decodeHex(str){
    str = str.replace(new RegExp("s/[^0-9a-zA-Z]//g"));
    var result = "";
    var nextchar = "";
    for (var i=0; i<str.length; i++){
        nextchar += str.charAt(i);
        if (nextchar.length == 2){
            result += ntos(eval('0x'+nextchar));
            nextchar = "";
        }
    }
    return result;
   
}
//--></script>
</head>
<body>
<form name=code onsubmit="return false()">
<textarea name=text style='width:100%;height:75%;'>Enter text to encode or decode here.</textarea>
<table>
<tr><td align=center>
<input value="Encode" type=button onclick="document.code.text.value=encodeBase64(document.code.text.value);">
</td><td align=center>
Base 64
</td><td align=center>
<input value="Decode" type=button onclick="document.code.text.value=decodeBase64(document.code.text.value);">
</td></tr>
<tr><td align=center>
<input value="Encode" type=button onclick="document.code.text.value=encodeHex(document.code.text.value);">
</td><td align=center>
Hex
</td><td align=center>
<input value="Decode" type=button onclick="document.code.text.value=decodeHex(document.code.text.value);">
</td></tr>
<tr><td align=center>
</td><td align=center>
<input type=reset value=Clear>
</td><td align=center>
</td></tr>
</table>
</form>
</body>
</html>

您可能感兴趣的与本文相关的镜像

Seed-Coder-8B-Base

Seed-Coder-8B-Base

文本生成
Seed-Coder

Seed-Coder是一个功能强大、透明、参数高效的 8B 级开源代码模型系列,包括基础变体、指导变体和推理变体,由字节团队开源

你遇到了这个错误: ```bash -ash: base64: not found ``` 这说明你的 **串口设备上没有 `base64` 命令**。 这是非常常见的现象,尤其是在资源受限的嵌入式系统(如路由器、IoT 设备)中,很多工具是缺失的:`base64`、`sz`、`nc`、`wget` 等都可能不存在。 --- ## ✅ 目标不变 我们要把文件 `/data/temp/wl_curpower.txt` 的内容从 **串口设备** 传到你的 **虚拟机或 PC 上**,即使没有 `base64` 和 `lrzsz`。 --- ## ✅ 解决方案:使用 `hexdump` 或 `xxd` 替代 `base64` 即使没有 `base64`,大多数嵌入式 Linux 系统至少有以下命令之一: - `hexdump` - `od` (octal dump) - `xxd`(较少见) - 或者最原始的 `cat` 我们可以用这些“原始”工具把二进制/文本转成十六进制输出,然后复制粘贴到主机还原。 --- ## ✅ 方法一:使用 `hexdump -C` 输出可读十六进制(推荐) ### 在串口设备上运行: ```bash hexdump -C /data/temp/wl_curpower.txt ``` 输出示例: ``` 00000000 63 75 72 70 6f 77 65 72 3a 20 32 35 20 64 42 6d |curpower: 25 dBm| 00000010 0a circled plus |.| 00000011 ``` 👉 全选并复制整个输出(包括地址列和ASCII列) --- ### 在虚拟机上还原文件 #### 步骤 1:保存为临时文件 将上面的输出保存为 `/tmp/dump.txt` 例如创建文件: ```bash nano /tmp/dump.txt # 粘贴 hexdump 输出内容 ``` #### 步骤 2:使用 `xxd -r` 反向还原成原始文件 ```bash xxd -r -c 16 /tmp/dump.txt /tmp/wl_curpower.txt ``` > `-c 16` 表示每行 16 字节(标准格式) #### 步骤 3:查看结果 ```bash cat /tmp/wl_curpower.txt ``` 输出应为: ``` curpower: 25 dBm ``` ✅ 成功! --- ## ✅ 方法二:如果连 `hexdump` 都没有?试试 `od` ### 在串口设备上使用 `od` 输出十六进制: ```bash od -tx1 -v /data/temp/wl_curpower.txt ``` 输出示例: ``` 0000000 63 75 72 70 6f 77 65 72 3a 20 32 35 20 64 42 6d 0000020 0a 0000021 ``` 复制这段输出。 --- ### 在虚拟机上还原 新建文件 `/tmp/od_output.txt`,粘贴输出内容。 然后使用脚本或 `xxd -r` 类似方式还原。但更简单的是写一个 Python 脚本: #### 🐍 使用 Python 还原 `od` 输出 ```python # recover.py with open('/tmp/od_output.txt', 'r') as f: lines = f.readlines() data = [] for line in lines: parts = line.strip().split() if not parts: continue # 忽略第一列地址(八进制),其余是字节(十六进制) for b in parts[1:]: try: data.append(int(b, 16)) except ValueError: pass # 忽略无效行(如最后一行) # 写出原始文件 with open('wl_curpower.txt', 'wb') as f: f.write(bytes(data)) print("Recovered file: wl_curpower.txt") ``` 运行它: ```bash python3 recover.py cat wl_curpower.txt ``` 🎉 输出 `curpower: 25 dBm` --- ## ✅ 方法三:直接用 `cat` 查看 + 手动复制(适用于极小文件) 如果你的文件只有一行: ```bash cat /data/temp/wl_curpower.txt ``` 输出: ``` curpower: 25 dBm ``` 👉 直接手动复制这一行 → 回到虚拟机粘贴保存即可。 虽然土,但最快。 --- ## ✅ 方法四:尝试其他编码工具(可选) 有些系统可能有: ```bash busybox base64 -d # 如果 busybox 支持 base64 模块 uudecode # 极少见 ``` 可以试一下: ```bash busybox base64 /data/temp/wl_curpower.txt ``` 如果有输出,就可以用前面的方法解码。 --- ## ✅ 总结:你现在可以这样做 | 工具可用性 | 操作 | |-----------|------| | ✅ 有 `hexdump` | `hexdump -C file > out` → 复制 → 主机 `xxd -r` 还原 | | ✅ 有 `od` | `od -tx1 -v file` → 复制 → 用 Python 解析还原 | | ✅ 文件很小 | `cat file` → 直接复制文本内容 | | ⚠️ 什么都没有 | 建议先上传 `busybox` 或静态 `sz` 实现后续传输 | --- ## ✅ 推荐你现在立即尝试的操作 ### 在串口设备上: ```bash echo "=== hexdump output ===" hexdump -C /data/temp/wl_curpower.txt echo "=== end ===" ``` 全选复制输出。 ### 在虚拟机上: ```bash # 创建 dump 文件 nano /tmp/dump.txt # 粘贴 hexdump 输出 ``` 然后运行: ```bash xxd -r -c 16 /tmp/dump.txt ~/wl_curpower.txt cat ~/wl_curpower.txt ``` 🎯 应该能看到功率值。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值