字符与代表数据的转化

news2024/11/18 1:39:44

目的

在与设备交互当中,大都以十六进制的数进行交互。
而显示给用户时,是以字符的形式显示。
这中间就需要字符与其所代表的数值的转化,比如:
‘0F’---->0x0F
这怎么实现呢,一个是字符,另一个是数字,在计算机当中存的东西是不一样的,完全两类东西。
字符在计算机是通过ASCII码保存的,即:
由于计算机是美国人发明的,所以对于英文字符,美国人制定了一个字符和二进制对应的码表,这个码表就是ASCII码,即美国标准信息交换码(American Standard Code for Information Interchange)。
ASCII字符编码具体对应关系如下:
在这里插入图片描述

其本质也是数字,而且都是按顺序排列的,那这样就简单,开始实现:

实现过程

int MainWindow::char2bits(char ch)
{
    int bits = 0;
    if (ch >= 'a' && ch <= 'z')
    {
        bits = ch - 'a' + 10;
    }
    else if (ch >= 'A' && ch <= 'Z')
    {
        bits = ch - 'A' + 10;
    }
    else if (ch >= '0' && ch <= '9')
    {
        bits = ch - '0';
    }
    else
    {
        bits = -1;
    }
    return bits;
}
int MainWindow::hex2bytes(const char *hex, char *bytes, int size)
{
    int len = strlen(hex);
    int nbytes = (len + 1) / 3;
    if (nbytes > size)
    {
        return -1;
    }
    int n;
    for (n = 0; n != nbytes; ++ n)
    {
        int lndx = n * 3;
        int rndx = lndx + 1;
        int lbits = char2bits(hex[lndx]);
        int rbits = char2bits(hex[rndx]);
        if (lbits == -1 || rbits == -1)
        {
            return -1;
        }
        bytes[n] = (lbits << 4) | rbits;
    }
    return nbytes;
}
void MainWindow::on_btnTest_clicked()
{
    const char *hex = "07 0A 02 10 03 00 00 00 00 00";
       char stream[10];
       int nbytes = hex2bytes(hex, stream, 10);
       if (nbytes != -1)
       {
           int i = 0;
           for ( ; i < nbytes; ++ i)
           {
               qDebug("%02x ", stream[i]);
           }
       }
}

运行情况:
在这里插入图片描述

总结

一开始想时,感觉有些复杂,知道其本质了就简单了了,什么本质,字符在计算机里就是存在数字,这种对应关系就是ASCII表。
比如字符 ‘B’ 其对应的数值应该为11,那其:‘B’-‘A’=1,那再加上10,不就是11了吗?
再比如’1’,其对应的数据应该为1,那’1’-‘0’=1
一切字符都是两个字节的数值,并且是按顺序来的,理解了这个本质,就非常简单了。
最后以一图进行总结:
在这里插入图片描述

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

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

相关文章

Apache seatunnel集群部署

跳转到安装目录 cd /opt/soft/seatunnel 1.设置环境变量 export SEATUNNEL_HOME/opt/soft/seatunnel export PATH$PATH:$SEATUNNEL_HOME/bin 启动服务端 ./bin/seatunnel-cluster.sh -d 启动客户端 ./bin/seatunnel.sh --config ./config/kafka2gbase_udf.conf 这样就启…

Vue3 数字滚动插件 vue-countup-v3

文章目录 介绍效果安装属性事件配置项完整样例 介绍 vue-countup-v3 插件是一个基于 Vue3 的数字动画插件&#xff0c;用于在网站或应用程序中创建带有数字动画效果的计数器。通过该插件&#xff0c;我们可以轻松地实现数字的递增或递减动画&#xff0c;并自定义其样式和动画效…

软件测试职业发展的7个阶段,哪个都吃香!

首先谈谈我在软件测试行业的亲身经历&#xff1a;我的一位同事曾经很认真地问过我一个问题&#xff0c;他说他现在从事软件测试工作已经4年了&#xff0c;但是他不知道现在的工作和自己在工作3年时有什么不同&#xff0c;他想旁观者清&#xff0c;也许我能回答他的问题。此外他…

手写vue-diff算法(一)

Vue初始化流程 1.Vue流程图 Vue流程图&#xff1a; Vue的初始化流程&#xff0c;默认会创建一个Vue实例&#xff0c;执行初始化、挂载、模板编译操作&#xff0c;模板被编译成为render函数&#xff1b;在render函数初始化时会执行取值操作&#xff0c;从而进入getter方法对当…

【科研入门】会议、期刊、出版社、文献数据库、引文数据库、SCI分区、影响因子等基础科研必备知识

大家好&#xff0c;我是洲洲&#xff0c;欢迎关注&#xff0c;一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我&#xff01; 本文目录 一、会议与期刊二、如何辨别是否…

【UE5 Cesium】07-Cesium for Unreal 从一个地点飞行到另一个地点(下)

UE版本&#xff1a;5.1 介绍 本文以在基督城&#xff08;新西兰&#xff09;和悉尼&#xff08;澳大利亚&#xff09;这两个城市间为例&#xff0c;在上一篇文章&#xff08;【UE5 Cesium】06-Cesium for Unreal 从一个地点飞行到另一个地点&#xff08;上&#xff09;&#…

vant-weapp源码解析---Tab标签页

这个标签栏&#xff0c;属于一个很常见的组件&#xff0c;一般我不用这个组件&#xff0c;自己手写一个scroll-view以及样式&#xff0c;更加轻便。但是我写的最简单的标签页没有滚动效果&#xff0c;以及选中标签动画效果。因此根据标签栏滚动学习下&#xff0c;并且自己手写一…

动态规划的入门

https://www.bilibili.com/video/BV13Q4y197Wg/ 动态规划解题步骤 —— carl 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 所以动态规划中每一个状态一定是由…

Postman 最被低估的功能,自动化接口测试效率简直无敌!

目录 该篇文章针对已经掌握 Postman 基本用法的读者&#xff0c;即对接口相关概念有一定了解、已经会使用 Postman 进行模拟请求的操作。 接口结果判断 功能区 脚本相关 代码模板 集合(批量)测试 批量执行 变化的参数数据 请求依赖问题 接口执行顺序 数据传递 解决依…

系统出错。发生系统错误 1067。进程意外终止。

问题描述 使用管理员cmd&#xff0c;任务管理器均无法启动mysql。 报错提示信息&#xff1a;系统出错。发生系统错误 1067。进程意外终止。 错误排查 1.检查3306端口是否被占用 在cmd输入netstat -aon|findstr 3306&#xff0c;结果如下&#xff1a; 如果你发现是端口被占用…

OpenAI 又赢麻了谷歌 DeepMind 创始人刚称 Gemini 能碾压 GPT-4

整理 | 褚杏娟&#xff0c;核子可乐 谷歌在上个月的开发者大会上公布了一系列 AI 新项目&#xff0c;当时首次亮相的 Gemini 曾受到不少嘲讽。但近日&#xff0c;DeepMind 联合创始人兼 CEO Demis Hassabis 自曝&#xff0c;工程师们正在使用 AlphaGo 的技术来开发 Gemini&…

Java框架之spring 的 AOP 和 IOC

写在前面 本文一起看下spring aop 和 IOC相关的内容。 1&#xff1a;spring bean核心原理 1.1&#xff1a;spring bean的生命周期 spring bean生命周期&#xff0c;参考下图&#xff1a; 我们来一步步的看下。 1 其中1构造函数就是执行类的构造函数完成对象的创建&#x…

【Java】Java核心 79:Git 教程(2)Git 安装

文章目录 目标内容总结 上一篇我们讲到&#xff1a;Git是一个分布式版本控制系统&#xff0c;常用于协同开发和版本管理的工具。它可以跟踪文件的修改、记录历史版本&#xff0c;并支持多人协同工作。通过Git&#xff0c;你可以轻松地创建和切换分支、合并代码、回滚修改等操作…

Kicad编译

Windows 1.安装visual studio Pro 2019 以上版本&#xff0c;建议2022&#xff0c;自行破解&#xff0c;安装时一定要勾选上cmake工具&#xff1b;安装Git bash 2.去Gitlab上fork kicad的master分支到自己的gitlab仓库上&#xff0c;在本地创建kicad-source路径&#xff0c;初…

【debug】:安装mmcv-full==1.2.4包过程报错

【debug】:安装mmcv-full1.2.4包过程报错This error originates from a subprocess, and is likely not a problem with pip WARNING: Ignoring invalid distribution -illow (d:\anaconda3\envs\pytorch\lib\site-packages) 这是由于安装包过程中曾经出现问题&#xff0c;会影…

生成特定相关系数的变量

本文转载自根据相关性生成变量 已知一组变量a&#xff0c;想要生成另一组变量b&#xff0c;要求a与b之间相关性为c。 实现思路如下&#xff1a; 设固定变量为x1&#xff0c;随机变量x2&#xff0c;相关系数为rho。x1与x2之间的相关性可以转化为向量之间的夹角问题&#xff0c;…

Linux与Windows:操作系统之争及个人体验比较

在当今数码化的世界中&#xff0c;操作系统扮演着关键的角色。Linux和Windows作为最受欢迎和广泛使用的操作系统之一&#xff0c;具有不同的特点和优势。作为一个AI模型&#xff0c;我虽然没有真正的使用经验&#xff0c;但我可以就这两个操作系统进行比较&#xff0c;并提供一…

pointclouds 点云 demo 中的资源文件如pcd找不到的问题

一、问题描述 点云官网提供了许多学习点云类库的例子和demo &#xff0c;但是在github中找到tutorials后执行 mkdir build cd build cmake .. make 之后却发现没有 资源文件&#xff0c;怎么办 如&#xff1a;pcl-pcl-1.7.2\doc\tutorials\content\sources\normal_estimation…

QVHZO-A-06-3/U0/WG直动式比例流量阀控制器

QVHZO-A-06-3/U0/WG、QVHZO-A-06-12/I/PE、QVHZO-A-06-18/I、QVHZO-A-06-36/U0、QVHZO-A-06-45/I、QVKZOR-A-10-65/I/PE、QVKZOR-A-10-90/I直动式比例流量阀特点&#xff1a; 具有恒压差流量补偿功能 通过比例线圈起动 用于底板安装: 油口安装面符合ISO4401(规格尺寸6和10)…

基于单片机智能温室大棚控制系统

功能介绍 以51单片机作为主控系统&#xff1b; DS18B20温度采集模块检测温度&#xff1b; 光敏电阻和ADC0832组成的光照检测模块&#xff1b; 土壤湿度检测模块检测土壤湿度&#xff1b; CO2检测模块检测CO2浓度&#xff1b; LCD1602显示模块显示测量值、 若温度小于温度最…