打怪升级之如何发送HEX进制的数据出去

news2024/11/28 17:42:58

Hex数据老大难

不少人都困扰于如何将电脑中读取到的string类型的数据变成整形发送出去。一半来说,不论你调用的通信方式是串口的还是网络的,亦或是PCIE的,其在电脑端的实际情况都是以系统API的形式呈现的。而系统API函数提供的接口,本质上只需要两类变量即可:

1.你的数据首位地址,一半来说就是一个char*变量;
2.你的数据总共长度。

比如,如果你使用ASCII编码,一串string发送的过程就是,你将这串string的首地址告诉API,再将string的长度告诉API,然后API根据这一串数据去读取地址控件中相应长度的数据。

一个地址char 变量内保存的数据是什么,是我们比较关心的。比如,如果你使用的是char * 表示的一串数据(string),那么根据string中的每一个字符元素对应的ASCII码,才是实际内存中char代表的内容。

所谓HEX,其实无意义,因为不论是什么样的数据或者编码,在内存里其实存的都是二进制,你按16位16位的取就可以了,API发送的也是直接内存里的二进制数据。重点始终在于,我们如何整理好我们在内存中的二进制数据。

%c与%d

让我们打开天窗说亮化吧,一个char对应的保存内容是什么,由下面这个东西可以解释:


char a = 97;//%c a %d 97

char a = a;//报错

char a = 'a';//%c a %d 97

char a = "a";//报错

char a = 'WIND';//%c D %d 68

char a = '爱';//%c ? %d -46(这个后面专门再讨论)

也就是说,一个char的内存其很固定,一直都是一个8位宽字节,里面保存了一个整数,比如97。也就是说,实际API发送的东西就是%d的东西,一个char由一个8位宽字节表示,所以其范围为0到255(ASCII的总字符数少于255)。如果char a表示了一个不在ASCII里的字符,那么它一定是某个其他你暂时不知道的编码格式里的数字–文字对应表,你需要找到这样的对应表,比如UINCODE编码的本质就是一种数字–文字对应表,GBK也是。

这里我们展示三种实验:

#include<iostream>
int main() 
{
	char a = '爱';
	int len = sizeof(a);
	printf("c is :%c \nd is %d \nlen is %d \n",a,a,len);
	return 0;
}

在这里插入图片描述

#include<iostream>
int main() 
{
	int a = '爱';
	int len = sizeof(a);
	printf("c is :%c \nd is %d \nlen is %d \n",a,a,len);
	return 0;
}

在这里插入图片描述

#include<iostream>
int main() 
{
	long a = '爱';
	int len = sizeof(a);
	printf("c is :%c \nd is %d \nlen is %d \n",a,a,len);
	return 0;
}

在这里插入图片描述

我们在汉字字符集编码查询中找到如下结论:

在这里插入图片描述

可以发现,尽管你的输入是个汉字,但依然是以数字的方式与汉字对应的。你的char整形或者int整形,保存的事实上也是数字,是一串固定位宽的数据,所以你只要保证你的%d数据正确,天然的就是HEX,根本就不用特地的再转。

最后,援引一些我问大佬的结论:

'爱’这样的写法赋值,跟你所用的文本工具(比如cpp)打开后的编码方式直接相关。

如何%d的赋值

好了,现在我们考虑这样一个问题:

你有一个char a = ‘1’;

你如何把char b = 1;

赋值成这种形式?

#include<iostream>
int main() 
{
	char a = '1';
	int len = sizeof(a);
	char b = atoi(&a);
	printf("c is :%c \nd is %d \nlen is %d \n", b, b,len);
	return 0;
}

没错,用最简单的stoi或者atoi函数转换一下就可以了。

在这里插入图片描述

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

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

相关文章

项目实战典型案例23——-注册上nacos上的部分服务总是出现频繁掉线的情况

注册上nacos上的部分服务总是出现频繁掉线的情况一&#xff1a;背景介绍二&#xff1a;思路&方案解决问题过程涉及到的知识nacos服务注册和服务发现一&#xff1a;背景介绍 spring cloud项目通过nacos作为服务中心和配置中心&#xff0c;出现的问题是其中几个服务总是出现…

【电子通识】案例:从YS-CH341T USB转IIC和UART模块使用学习如何找资料

最近在调一个充电芯片&#xff0c;要用到IIC与充电芯片通信来读取和写入充电芯片寄存器&#xff0c;控制充电芯片的各种参数。从以前老员工那里捡到一个这样的模块&#xff0c;模块背面写了YS-CH341T。看着有IIC通信的样子&#xff0c;所以先在网上找一下资料。首先先在网上找到…

npm安装依赖包:405 Method Not Allowed...

运用npm安装依赖包时报错&#xff0c;错误如下。 解决思路&#xff1a; 关注到错误信息上写明了 Method Not Allowed&#xff0c;其后注明了 GET请求以及一个url&#xff0c;说明极有可能是不允许向这个路由发送GET请求&#xff1b; 在浏览器中尝试打开这个地址&#xff0c;结…

在分析了共50亿美元的加密融资之后,我们发现了这些

对加密市场嗅觉敏锐的玩家来说&#xff0c;市场中项目融资是不得不关注的选项&#xff0c;不少优质项目拿到了巨额融资之后&#xff0c;被大家所关注&#xff0c;在20-21年期间&#xff0c;行业内也出现了不少一级机构&#xff0c;布局早期项目&#xff0c;获取时代红利已经成为…

圆桌(满足客人空座需求,合理安排客人入座圆桌,准备最少的椅子)

CSDN周赛第30期第四题算法解析。 (本文获得CSDN质量评分【91】)【学习的细节是欢悦的历程】Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单…… 地址&#xff1a;https://lq…

什么是业务运营?关键组成部分有哪些?

企业领导者使用收入运营和智能软件等技术来分析买家的不同接触点。这些见解决定了客户互动的成败&#xff0c;从而改善了业务运营&#xff0c;从而带来了成功。 什么是业务运营&#xff1f; 业务运营包括企业为保持盈利而执行的一系列日常任务。虽然这些任务可能因业务类型或行…

主辅助服务市场出清模型研究【旋转备用】(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…

【已解决】Python的坑:os.system()运行带有空格的长路径和双引号参数有bug

在Python代码里运行DOS命令&#xff0c;可以使用os库的os.system()函数。其用法很简单&#xff0c;需要注意的是os.system不会返回输出的结果赋予一个变量。今天我发现了一个bug&#xff1a;当DOS命令行带有双引号路径、双引号参数时&#xff0c;os.system()运行的结果总是显示…

带你认识什么是485通信

在现代工业控制系统中&#xff0c;常常需要实现分布式控制&#xff0c;而分布式控制需要实现不同设备之间的通信。其中&#xff0c;485通信协议是一种被广泛使用的通信协议之一。1. 介绍A. 485通信的定义485通信协议是一种串行通信协议&#xff0c;也被称为RS-485。它是由美国电…

300. 最长递增子序列——【Leetcode每日刷题】

300. 最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子…

leetcode 1648. 销售价值减少的颜色球

1648. 销售价值减少的颜色球这道题不知为何总想记录下来&#xff0c;思路很简单&#xff0c;但是实现总是出错&#xff0c;这也许就是要记录的原因。再一个觉得题解写的比较难以理解&#xff0c;所以再细致一些解析。希望可以帮到实在搞不懂的同学 思路: 目的&#xff1a;我们…

聚观早报|谷歌发布最大视觉语言模型;王兴投资王慧文ChatGPT项目

今日要闻&#xff1a;谷歌发布全球最大视觉语言模型&#xff1b;马斯克预计Twitter下季度现金流转正&#xff1b;王兴投资王慧文ChatGPT项目&#xff1b;美国拟明年 11 月开展载人绕月飞行&#xff1b;慧与科技宣布收购Athonet谷歌发布全球最大视觉语言模型 近日&#xff0c;来…

RocketMQ重复消费的症状以及解决方案

RocketMQ重复消费的症状以及解决方案 生产消息时重复 症状 当一条消息已被成功发送到 消费者 并完成持久化&#xff0c;此时出现了网络闪断或者客户端宕机&#xff0c;导致服务端对客户端应答失败。 如果此时 生产者 意识到消息发送失败并尝试再次发送消息&#xff0c;消费者…

学习 Python 之 Pygame 开发魂斗罗(十一)

学习 Python 之 Pygame 开发魂斗罗&#xff08;十一&#xff09;继续编写魂斗罗1. 改写主类函数中的代码顺序2. 修改玩家初始化3. 显示玩家生命值4. 设置玩家碰到敌人死亡5. 设置敌人子弹击中玩家6. 修改updatePlayerPosition()函数逻辑继续编写魂斗罗 在上次的博客学习 Pytho…

【Flutter从入门到入坑】Flutter 知识体系

学习 Flutter 需要掌握哪些知识&#xff1f; 终端设备越来越碎片化&#xff0c;需要支持的操作系统越来越多&#xff0c;从研发效率和维护成本综合考虑&#xff0c;跨平台开发一定是未来大前端的趋势&#xff0c;我们应该拥抱变化。而 Flutter 提供了一套彻底的移动跨平台方案…

【AlgorithmTraining】06:STL容器使用与练习(上)

STL容器的使用与练习&#xff08;上&#xff09; OVERVIEWSTL容器的使用与练习&#xff08;上&#xff09;string类1.vector动态数组&#xff1a;&#xff08;1&#xff09;vector动态一维数组&#xff1a;&#xff08;2&#xff09;vector动态二维数组&#xff1a;2.deque双端…

VR全景旅游,成为数字文旅破局关键!

导语&#xff1a;VR全景技术是一种基于虚拟现实技术的全景图像显示技术&#xff0c;已经在各个领域得到广泛应用。在旅游业中&#xff0c;VR全景技术也越来越受到重视&#xff0c;并逐渐成为旅游业发展的重要趋势。本文将介绍VR全景技术在旅游业中的应用场景和价值&#xff0c;…

【嵌入式Linux内核驱动】02_字符设备驱动

字符设备驱动 〇、基本知识 设备驱动分类 &#xff08;按共性分类方便管理&#xff09; 1.字符设备驱动 字符设备指那些必须按字节流传输&#xff0c;以串行顺序依次进行访问的设备。它们是我们日常最常见的驱动了&#xff0c;像鼠标、键盘、打印机、触摸屏&#xff0c;还有…

MATLAB——信号的采样与恢复

**题目&#xff1a;**已知一个连续时间信号 其中&#xff1a;f01HZ&#xff0c;取最高有限带宽频率fm5f0。分别显示原连续时间信号波形和 3种情况下抽样信号的波形。并画出它们的幅频特性曲线&#xff0c;并对采样后的信号进行恢复。 step1.绘制出采样信号 这部分相对简单…

面试知识点梳理及相关面试题(十一)-- docker

1. Docker和虚拟机的区别 容器不需要捆绑一整套操作系统&#xff0c;它只需要满足软件运行的最小内核就行了。 传统虚拟机技术是虚拟出一整套硬件后&#xff0c;在其上运行一个完成操作系统&#xff0c;在该系统上再运行所需应用进程容器内的应用进程直接运行于宿主的内核&am…