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

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

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 97char a = a;//报错char a = 'a';//%c a %d 97char a = "a";//报错char a = 'WIND';//%c D %d 68char 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.lryc.cn/news/37444.html

相关文章:

  • 国产8K摄像机拍摄回顾与画面数据反馈
  • C++中拷贝构造和赋值重载的注意事项以及编译器的优化处理
  • Java设计模式_单例模式
  • 刚刚学完CSS :display float,flex flow 傻傻分不清了
  • python建立图片索引数据库,根据一段文字,找到存放在电脑上最匹配的图片
  • MySQL OCP888题解048-letter N in slow query log(慢查询日志里的字母N)
  • 数据采集 - 笔记 2
  • 电子技术——数字IC技术,逻辑电路和设计方法
  • [ROS2 知识] 包依赖关系和rosdep详述
  • mysql创建索引导致死锁,数据库崩溃,完美解决方案
  • c++11 标准模板(STL)(std::unordered_map)(八)
  • 企业ISO体系认证办理,可以自行申请吗?为什么都要找咨询公司?
  • 二、Neo4j源码研究系列 - 单步调试
  • 基于Qt WebEngine 的Web仪器面板GUI程控技术
  • 海康摄像头使用RTSP
  • 编程语言分类
  • [nodejs开发] typescript引入js模块或文件
  • 小帮软件机器人应用于通信集团财务数据填报、编制、稽核、银企对账
  • 37. CF-Weights Distributing
  • 百丽时尚×优维科技×道客战略启动「云原生一体化项目」
  • 小诺开源技术
  • AidLux AI应用案例悬赏选题 | 纺织品表面瑕疵检测
  • UE官方教程笔记02-实时渲染基础下
  • grep命令——在文件中搜索指定的文本模式
  • 数据结构刷题(二十二):90子集II、491递增子序列、46全排列
  • AI+人类,实现高效网络安全
  • 牛客小白月赛68【A-E】
  • WIFI P2P架构
  • 架构师之中台思维_系统发展之路_结果和抽象之间平衡的艺术
  • 23届非科班选手秋招转码指南