当前位置: 首页 > news >正文

UVa 10343 Base64 Decoding

题目描述

本题要求实现一个Base64\texttt{Base64}Base64解码器,用于解码经过Base64\texttt{Base64}Base64编码的字符串。Base64\texttt{Base64}Base64是一种将二进制数据编码成ASCII\texttt{ASCII}ASCII字符的编码方式,常用于在文本协议(如电子邮件)中安全地传输二进制数据。

编码规则简述如下:

  • 将每333个字节(242424位)的数据分为一组。
  • 将这242424位分成444666位的组。
  • 每个666位组映射到一个Base64\texttt{Base64}Base64字符表中(包括A-Za-z0-9+/)。
  • 如果原始数据长度不是333的倍数,使用=进行填充。

本题输入由多个数据集组成,每个数据集以#结束。要求对每个数据集进行Base64\texttt{Base64}Base64解码,并在输出解码结果后紧跟一个#


解题思路

Base64\texttt{Base64}Base64解码原理

Base64\texttt{Base64}Base64解码是编码的逆过程:

  1. 将每个Base64\texttt{Base64}Base64字符根据映射表转换为666位二进制值。
  2. 将每444666位组拼接成242424位。
  3. 将这242424位拆分成333888位字节,即还原出原始数据。

如果编码时使用了填充符=,说明原始数据长度不是333的倍数,解码时需要忽略这些填充符对应的位。


参考代码

注意:由于在线测试数据存在问题,目前无法获得Accepted\texttt{Accepted}Accepted

// Base64 Decoding// UVa ID: 10343// Verdict: Wrong Answer// Submission Date: 2025-11-15// UVa Run Time: 0.000s//// 版权所有(C)2025,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;// 字符到 6 位值的映射表(-1 表示无效)intcharToVal[256];// 初始化映射表voidinitTable(){fill(charToVal,charToVal+256,-1);for(inti=0;i<26;++i)charToVal['A'+i]=i;for(inti=0;i<26;++i)charToVal['a'+i]=26+i;for(inti=0;i<10;++i)charToVal['0'+i]=52+i;charToVal['+']=62;charToVal['/']=63;}// 解码一个 Base64 字符串(已过滤掉无关字符)stringdecodeBase64(conststring&encoded){string decoded;intn=encoded.size();for(inti=0;i<n;i+=4){intv[4]={0};intvalidCnt=0;for(intj=0;j<4;++j){charc=encoded[i+j];if(c=='=')v[j]=-1;// 填充符elsev[j]=charToVal[(unsignedchar)c];if(v[j]!=-1)++validCnt;}if(validCnt==4){decoded.push_back((v[0]<<2)|(v[1]>>4));decoded.push_back(((v[1]&0xF)<<4)|(v[2]>>2));decoded.push_back(((v[2]&0x3)<<6)|v[3]);}elseif(validCnt==3){decoded.push_back((v[0]<<2)|(v[1]>>4));decoded.push_back(((v[1]&0xF)<<4)|(v[2]>>2));}elseif(validCnt==2){decoded.push_back((v[0]<<2)|(v[1]>>4));}}returndecoded;}intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);initTable();string current;// 当前数据集的 Base64 字符序列(含 '=')charch;while(cin.get(ch)){if(ch=='#'){if(!current.empty()){string decoded=decodeBase64(current);cout<<decoded<<'#';current.clear();}// 若 current 为空,说明是连续的 #,忽略}else{// 只保留 Base64 有效字符和 '='boolisValid=(ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')||(ch>='0'&&ch<='9')||ch=='+'||ch=='/'||ch=='=';if(isValid)current.push_back(ch);// 其他字符(空格、换行等)忽略}}return0;}

总结

本题是一个典型的编码/解码模拟题,关键在于理解Base64\texttt{Base64}Base64的编码规则及其逆过程。我们通过建立映射表、逐字符转换、二进制拼接和填充处理,实现了高效且正确的解码过程。代码结构清晰,逻辑严密,适合作为Base64\texttt{Base64}Base64解码的参考实现。

http://www.jsqmd.com/news/1221037/

相关文章:

  • macm1使用docker部署opencode arm
  • 「ECG信号处理——(32)面向可穿戴设备的ECG运动伪影去除算法对比研究」2026年05月25日
  • LongCat-2.0-FP8在企业级应用中的实践:美团AI技术栈解析
  • 构建企业级配置系统:node-jsonc-parser在微服务架构中的应用
  • 2026武汉钻石回收价格行情指南 正规渠道无隐形扣费实测推荐 - 奢侈品回收机构参考
  • Windows Terminal Quake 支持哪些系统?跨平台兼容性详解
  • GraphRAG真能提效吗?先看流程里最慢的那一步
  • M-EMACS编程环境配置指南:支持Python、C++、Rust、Go等20+编程语言
  • 别让用户干等:流式对话的中断、重试与多会话并发管理
  • 第4天:数据到底存在哪里?——理解内存的本质
  • Slug未来路线图:URL短链服务的演进方向和技术趋势
  • 2026年7月最新劳力士济南万达广场(章丘店)维修保养服务电话 - 劳力士官方服务中心
  • 壶关县室内空气检测公司哪家靠谱?横向对比多家机构,甲醛检测治理专业度深度评测 - 专注室内空气检测治理
  • 开源项目第163期:wigolo — 零 API Key、零费用的本地优先 Agent 网络搜索工具,对比 Tavily/Exa/Firecrawl
  • ScrollScreenshot安装与配置:从零开始搭建Android滚动截图环境
  • Traquer社区精选:用户分享的3个创意应用场景
  • WAIC2026:一键拍出文物“证件照”,扫描全能王AI去反光“看清”千年古画
  • 067、3A联动与协同控制:曝光、对焦、白平衡的闭环优化
  • 如何永久保存微信聊天记录:WeChatMsg让你的数字记忆不再消失
  • Devstral-Small-2-24B-Instruct-2512-5bit核心功能解析:图像描述、视觉问答、多模态对话
  • 数据压缩原理与应用 | 实验五 | 基于DCT量化的音频编解码
  • 提升SEO排名:gulp-htmlmin助力网站性能优化的终极方案
  • 2026 国内高端网站建设公司靠谱推荐,13家高端网站设计公司综合排名(大型建站大厂 + 独立设计工作室),专注品牌官网、企业站定制开发的知名高端建站企业完整盘点 - 产业观察报
  • 港口AI预警系统(散货监控+跨境跟踪+一屏全域管控)
  • 2026丽水大冰块优选推荐榜单:哪家配送更靠谱? - 热点咨讯
  • 【记录】什么时候选择 .Net Framework
  • 国产开源表单系统:填鸭表单TDuckX3.7版本发布!
  • Seashells安全最佳实践:保护你的命令行数据传输安全指南
  • 拉萨人卖黄金别踩坑!这五家正规回收门店街坊都在推 - 小城生活闲谈
  • AI 评测系列(02):评测指标设计——从业务目标到可量化指标