news 2026/7/19 17:25:14

UVa 10343 Base64 Decoding

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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解码的参考实现。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 17:23:52

《从算法到落地:基于HarmonyOS API 23的端侧图像推理实战》

一、引言云端AI推理存在两个显著问题&#xff1a;网络延迟导致实时性差&#xff08;如视频通话场景需200ms以上往返延迟&#xff09;&#xff0c;用户隐私数据上传风险。端侧部署可将ResNet50等模型的推理延迟控制在50ms内&#xff0c;同时避免原始数据离开设备。本文实现一个基…

作者头像 李华
网站建设 2026/7/19 17:23:26

可见性剔除:遮挡、视锥与 Portal 的层级设计

可见性剔除&#xff1a;遮挡、视锥与 Portal 的层级设计 一、看不见的&#xff0c;就不该画 实时渲染的其一是条铁律是"不可见的物体不渲染"。一个开放场景里可能有十万物件&#xff0c;但玩家同一时刻只能看到其中一小部分。把全部物件都送进管线&#xff0c;是带宽…

作者头像 李华
网站建设 2026/7/19 17:22:50

rtsp-stream社区贡献指南:如何参与开源项目开发与维护

rtsp-stream社区贡献指南&#xff1a;如何参与开源项目开发与维护 【免费下载链接】rtsp-stream Out of box solution for RTSP - HLS live stream transcoding. Makes RTSP easy to play in browsers. 项目地址: https://gitcode.com/gh_mirrors/rt/rtsp-stream rtsp-s…

作者头像 李华
网站建设 2026/7/19 17:21:03

asdf-python插件原理解析:如何通过python-build实现终极版本管理

asdf-python插件原理解析&#xff1a;如何通过python-build实现终极版本管理 【免费下载链接】asdf-python Python plugin for the asdf version manager [maintainerdanhper] 项目地址: https://gitcode.com/gh_mirrors/as/asdf-python asdf-python是一款专为asdf版本管…

作者头像 李华
网站建设 2026/7/19 17:20:32

第一章总结:基础入门阶段你该掌握的20个核心概念

第一章总结&#xff1a;基础入门阶段你该掌握的20个核心概念40篇文章&#xff0c;基础入门篇到此告一段落。这篇文章是一个"总复习"——帮你把第一章中学到的知识系统化地整理一遍。我会用20个核心概念作为锚点&#xff0c;串联起基础入门阶段的全部精华。一、基础认…

作者头像 李华
网站建设 2026/7/19 17:20:27

Grok给出的代码怎么生成图片 真正破局者——AI导出鸭

引言 在AI生成代码与设计稿日益普及的今天&#xff0c;开发者与设计师常被困在“代码跑通了&#xff0c;图片出不来”的最后一公里。Grok给出的代码逻辑严谨&#xff0c;但将其转化为可分发、可编辑的图片&#xff0c;始终是效率黑洞。本文将深度拆解这一痛点&#xff0c;并带出…

作者头像 李华