7-13 字节解析(parse_byte)--PTA实验C++

一、题目描述

字节有几位都没个标准,古代程序员过的什么日子啊?还好现在字节统一成8位了。
鉴于我对C++已有相当牢固的基础,可以探索底层开发了,先做个解析十六进制字节数据的功能吧。

输入规格
  • 每项待读入的字节数据由两个非空白字符构成。
    • 如是正常的十六进制字节数据,高位在前、低位在后
    • 不区分大小写。
  • 各项之间由数量不定的空白符隔开。直接用cin读入即可,无需特殊处理。
输出规格
  • 每行输出一项:先输出读入的字符,间隔冒号和空格,再按十进制输出字节的数值。
样例输入
 0A    a3
Ff +z
样例输出
0A: 10
a3: 163
Ff: 255
+z: invalid
样例解释
  • 0A: 0 * 16 + 10 * 1 = 10
  • a3: 10 * 16 + 3 * 1 = 163
  • Ff: 15 * 16 + 15 * 1 = 255
  • +z含无效字符。

提示:后续题目用到类似功能,设计时请考虑重用性。

代码框架
#include <iostream>
using namespace std;unsigned char parse_byte(unsigned char hi, unsigned char lo){return 0; // TODO
}int main() {for(char hi, lo; cin >> hi >> lo;){cout << hi << lo << ": ";if(is_hex(hi) && is_hex(lo)){ // 重用cout << (int)parse_byte(hi, lo) << endl;}else{cout << "invalid" << endl;}}
}

二、完整C++代码实现

#include <iostream>
using namespace std;unsigned char parse_byte(unsigned char hi, unsigned char lo){if(hi>='0'&&hi<='9'){hi=hi-'0';}else if(hi>='a'&&hi<='f'){hi=hi-'a'+10;}else if(hi>='A'&&hi<='f'){hi=hi-'A'+10;}if(lo>='0'&&lo<='9'){lo=lo-'0';}else if(lo>='a'&&lo<='f'){lo=lo-'a'+10;}else if(lo>='A'&&lo<='f'){lo=lo-'A'+10;}return hi*16+lo; // TODO
}
bool is_hex(char c){ 
if((c>='0'&&c<='9')||(c>='a'&&c<='f')||(c>='A'&&c<='F')){return true;
}else{
return false; 
}
}
int main() {for(char hi, lo; cin >> hi >> lo;){cout << hi << lo << ": ";if(is_hex(hi) && is_hex(lo)){ // 重用cout << (int)parse_byte(hi, lo) << endl;}else{cout << "invalid" << endl;}}
}

三、测评详情

四、总结反思

hi和lo的高位低位转为十进制数的时候首先要对字符范围进行判断

a-f:hi=hi-'a'+10

A-Z:hi=hi-'A'+10

0-9:hi=hi-'0'!!!!这一步一定不要忘了

因为0的ascii码为48,就是要是字符直接加减法运算会默认用ascii码的值与整型进行加减

类型转换:因为char范围比int小可以直接隐式转换

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

virtualbox识别windows上usb设备

当你插入 USB 时&#xff0c;你的宿主操作系统可以轻松访问它并使用其中的文件。如果需要VirtualBox 的虚拟机也能访问物理机的 USB设备&#xff0c;需要安装安装扩展包管理器。 第一步&#xff1a; 要安装 VirtualBox 扩展包&#xff0c;只需访问 VirtualBox 官方下载页面&a…

2024华为OD机试真题-出租车计费-C++(C卷D卷)

题目描述: 程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。 出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常。 比如: 23再多一块钱就变为25;39再多一块钱变为50;399再…

深度学习-离线下载链接

1.torch安装包 https://download.pytorch.org/whl/torch/ 2.torchvision安装包 https://download.pytorch.org/whl/torchvision/ 持续更新...

骨传导耳机哪一款比较值得入手?年度精选好用骨传导耳机推荐

现在很多年轻人都会选择用骨传导耳机&#xff0c;因为骨传导耳机更加方便&#xff0c;不用入耳&#xff0c;不会伤害到耳朵&#xff0c;对耳膜也没有什么伤害。同时&#xff0c;因为骨传导耳机的结构也比较简单&#xff0c;所以佩戴也会更加舒适。接下来就给大家推荐几款口碑不…

LabVIEW老程序功能升级:重写还是改进?

概述&#xff1a;面对LabVIEW老程序的功能升级&#xff0c;开发者常常面临重写与改进之间的选择。本文从多个角度分析两种方法的利弊&#xff0c;并提供评估方法和解决思路。 重写&#xff08;重新开发&#xff09;的优势和劣势&#xff1a; 优势&#xff1a; 代码清晰度高&a…

面试二十七、 CAS和Atomic

CAS锁机制&#xff08;无锁、自旋锁、乐观锁、轻量级锁&#xff09;-CSDN博客 1. ABA问题 在C中&#xff0c;可以使用std::atomic和版本号来解决ABA问题。C标准库没有直接提供类似Java的AtomicStampedReference&#xff0c;但可以通过将版本号和指针组合在一起实现类似的效果。…

ESP32-C3模组上跑通OTA升级(10)

接前一篇文章&#xff1a;ESP32-C3模组上跑通OTA升级&#xff08;9&#xff09; 八、程序调试过程中遇到的问题及解决 前边各篇文章主要讲解了OTA的基础知识以及示例代码&#xff0c;但这其实是&#xff08;远远&#xff09;不够的&#xff0c;真正要在ESP32-C3芯片上跑通&…

【并发程序设计】13.信号机制

13.信号机制 概念&#xff1a; 信号机制是Unix、类Unix以及其他POSIX兼容的操作系统中的一种进程间通讯方式&#xff0c;它允许进程在发生特定事件时接收通知。 信号机制是操作系统中的一个重要概念&#xff0c;它提供了一种异步的通知机制&#xff0c;用于在进程之间传递消…

docker-compose 配置大全,持续更新

docker-compose 配置 安装docker-compose 1、执行脚本 由于github下载速度很慢,我将用到的程序放到了gitee仓库。 sudo curl -L https://gitee.com/brother_maolin/transfer/raw/master/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose2、执行,给予可执行…

6.s081通关小结

6.s081通关小结 终于是完成6.s081的所有lab了&#xff0c;感慨万千。已经忘了第一次听说这个lab是在什么时候了&#xff0c;只是模模糊糊地感觉是大三。那时的我第一次找到了刷题之外的新方向。但囿于小镇做题家对计算机认识的滞后性&#xff0c;什么Linux、Ubuntu之类的新系统…

【Python】解决Python报错:IndexError: queue index out of range

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

【Unity Shader入门精要 第12章】屏幕后处理效果(二)

1. 卷积 在图像处理中&#xff0c;卷积操作就是使用一个卷积核对一张图像中的每个像素做一系列的操作。 卷积核通常是一个四方形网格结构&#xff0c;如2x2、3x3的方形区域&#xff0c;该区域内每个方格都有一个权重值。 当对图像中的某个像素进行卷积操作时&#xff0c;将卷…

Linux域名解析不了/网络不可达/虚拟机连接不了的问题

记录域名解析不了/网络不可达/虚拟机连接不了的问题问题 目录 文章目录 记录域名解析不了/网络不可达/虚拟机连接不了的问题问题1.首先确定已经连接上路由器(我的就是在这嗝屁了....)1.1 查看路由表1.2查看当前的网络连接状态&#xff0c;包括网关1.3查看网络接口的状态&…

如何解决研发数据传输层面安全可控、可追溯的共性需求?

研发数据在企业内部跨网文件交换&#xff0c;是相对较为普遍而频繁的文件流转需求&#xff0c;基于国家法律法规要求及自身安全管理需要&#xff0c;许多企业进行内部网络隔离。不同企业隔离方案各不相同&#xff0c;比如银行内部将网络隔离为生产网、办公网、DMZ区&#xff0c…

十四天学会Vue——Vue核心下篇(理论+实战)(第三天)

一、Vue核心下篇 1.15 常用的内置指令 1. v-text <!--准备好一个容器 --><div id"root"><!-- 1.v-text中的字符替换掉div整个字符 --><div v-text"name">你好,{{name}}</div><!-- 2.将标签当做字符串解析 --><di…

Vue Router (创建 挂载)

创建路由模块 在src目录下创建router.js文件作为模块&#xff0c;该文件中按照如下步骤进行操作 1.导入路由相关函数&#xff0c;具体代码如下&#xff1a; import{ createRouter&#xff0c;createWebHashHistory } from Vue-router在上述代码中&#xff0c;从Vue-router中…

网络原理-TCP/IP --应用层

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 目录 3.网络原理 -TCP/IP3.1 应用层 3.网络原理 -TCP/IP 3.1 应用层 应用层是程序员打交道最多的一层,与应用程序直接相关 而应用层的协议,实际上就规定了你写的程序,通过网络传输的时候,按…

2928. 给小朋友们分糖果 I

给你两个正整数 n 和 limit 。 请你将 n 颗糖果分给 3 位小朋友&#xff0c;确保没有任何小朋友得到超过 limit 颗糖果&#xff0c;请你返回满足此条件下的 总方案数 。 示例 1&#xff1a; 输入&#xff1a;n 5, limit 2 输出&#xff1a;3 解释&#xff1a;总共有 3 种方…

FX2N用什么编程软件:深入解析与选择指南

FX2N用什么编程软件&#xff1a;深入解析与选择指南 在工业自动化领域&#xff0c;FX2N系列PLC因其卓越的性能和广泛的应用而备受瞩目。然而&#xff0c;对于许多初学者和工程师来说&#xff0c;如何选择合适的编程软件来开发FX2N系列PLC却是一个令人困惑的问题。本文将从四个…

【LINUX】LINUX基础(目录结构、基本权限、基本命令)

文章目录 LINUX的目录结构LINUX的基本权限LINUX基本命令 LINUX的目录结构 /&#xff1a;表示根目录bin&#xff1a;存放二进制可执行文件(命令ls、cat、mkdir等)boot&#xff1a;存放系统引导文件dev&#xff1a;存放设备文件etc&#xff1a;存放系统配置文件home&#xff1a;…