南昌冶金建设有限公司网站,如何制作微信小程序游戏,枣强网站建设代理,最新国际新闻大事件Hex数据老大难
不少人都困扰于如何将电脑中读取到的string类型的数据变成整形发送出去。一半来说#xff0c;不论你调用的通信方式是串口的还是网络的#xff0c;亦或是PCIE的#xff0c;其在电脑端的实际情况都是以系统API的形式呈现的。而系统API函数提供的接口#xff…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到255ASCII的总字符数少于255。如果char a表示了一个不在ASCII里的字符那么它一定是某个其他你暂时不知道的编码格式里的数字–文字对应表你需要找到这样的对应表比如UINCODE编码的本质就是一种数字–文字对应表GBK也是。
这里我们展示三种实验
#includeiostream
int main()
{char a 爱;int len sizeof(a);printf(c is :%c \nd is %d \nlen is %d \n,a,a,len);return 0;
}#includeiostream
int main()
{int a 爱;int len sizeof(a);printf(c is :%c \nd is %d \nlen is %d \n,a,a,len);return 0;
}#includeiostream
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;
赋值成这种形式
#includeiostream
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函数转换一下就可以了。