c#基础概念之进制

文章目录

前言

一、本质都是二进制

二、日常使用

三、串口助手

总结


前言

在工作中因为经常遇到通信问题串口通信或者以太网tcp通信就涉及到一个问题:数据的转换,经常会看到要16进制发送或者接收的数据是16进制,接受的数据是ascill格式等等会经常搞不清楚;


一、本质都是二进制

在电脑的底层里数据都是二进制来存的,也就是其实没有什么16进制的byte【】数组这种说法,因为在电脑存储里16进制的0x0a和10进制的10是一样的;那为什么在通信协议里会有16进制来发送数据这一说法呢?

二、日常使用

在通信协议里会有16进制来发送数据只是为了方便人们查看;比如通信协议里说串口指令 是0x30, 0x2E , 0x30, 0x20那么以下两种写法都是一样的:从电脑的角度看都是2进制的

0011 0000,0010 1110,0011 0000 ,0010 0000

cs 复制代码
byte[] bRead = new byte[] {  48, 46 , 48, 32}**十进制

byte[] bRead2 = new byte[] {  0x30, 0x2E , 0x30, 0x20}**十六进制

注意在vs里监控bRead 或者是bRead 2都是10进制的显示形式,这是vs默认的可以切换成十六进制的;

试一下可以发现下面两种都是true;

cs 复制代码
 if (bRead[3] == 0x20)
{
}

 if (bRead[3] == 32)
{
}

三、串口助手

在串口助手中会有选项发送的数据是16进制还是ascii码这种选项,会发现同一个数据选16进制发送就可以ascii码的话就不行;

那是因为这里的选择选的是你发送的数据是什么格式的,比如16进制的9和ascii码的9是不一样的

16进制的9是0x09;ascii码的9是要转换的对应的16进制是0x39

四、使用

4.1发送

可以使用Encoding.Default.GetBytes(yy);来字符串转字节数组,这个一般用来发送

4.2接收

可以使用Encoding.Default.GetString(n);;来字节数组转字符串

如果是要把收到的数据数组转成int或者float就需要移位了

比如返回{0x01, 0x7d}

cs 复制代码
   byte[] bRead1 = new byte[] { 0x01,0x7d};
int iTestNub= (bRead1[0] << 8)+bRead1[1]

总结

相关推荐
陈卫军老师6 小时前
陈卫军语录全集总结:12句话,一条主线
经验分享·笔记
2501_9269783310 小时前
给自指系统接一个外部锚 —— 一个关于「用 AI 观察自己」的方法
人工智能·经验分享·笔记·机器学习·ai写作
AOI小白新手上路14 小时前
anomalib 缺陷检测复现笔记:从跑通库到 EfficientAD 落地
人工智能·笔记·机器学习
xxwl58515 小时前
RabbitMQ 学习笔记
笔记·学习·rabbitmq
加油努力有饭吃15 小时前
DLMS/COSEM 蓝皮书解读(二十六):Auto connect(class_id = 29)—— 自动拨号与主动连接(出站管理)
笔记
CarIise16 小时前
Java实训阶段查漏补缺复习笔记1
java·开发语言·笔记
陈卫军老师16 小时前
陈卫军谈商业底线:营销是术,产品是道
经验分享·笔记·流量运营
智者知已应修善业16 小时前
【51单片机只有一个8*8点阵数据如何滚动起来一片595+一组IO+花样】2022-1-15
c++·经验分享·笔记·单片机·蓝桥杯·硬件架构
Space6553618 小时前
常见组学技术笔记:从 DNA 基因组学到 Multi-omics
笔记
lcj251119 小时前
【Linux】 Makefile 详解
linux·笔记·面试