串口收发数据时字符、十六进制、二进制格式详细区分

在使用串口调试助手时发送和接收数据都是以字节 (Byte) 为单位,并且可以选择字符、十六进制、二进制三种收发格式 ,那么这三种格式究竟怎样区分呢?

首先我们来明确一个概念 :串口收发数据的单位 ‘‘ 字节 (Byte) ‘‘ ,   1Byte = 8 bits , 串口收发数据格式一般为  1bit起始位(一般为0) + 8bits 数据位(一字节) +1bit校验位(可有可无) +1bit结束位(一般为1)

下面逐一区分三种收发格式:

(1) 十六进制:   由于1位十六进制数位宽为 4bits ,那么 2 位十六进制数占有一个字节的位宽,所以当以16进制格式收发时,每个字节发送或者接收2位十六进制数, 举个例子 ,当以16进制格式发送一组数据 ‘‘ 0F3C781A ‘‘ 时   , 每个字节对应的数据如下:

发送数据 0x0F 0x3C 0x78 0x1A
字节数   1   2   3   4

注意: 类似 ‘‘0xFF‘‘ 是表示两位十六进制数的标准写法,‘‘0x‘‘ 在实际应用串口调制助手中时直接省略。

(2) 二进制  :  参照十六进制收发格式的原理 ,每位二进制数位宽为 1bit ,那么串口每个字节可以传输 8 位二进制数,同样,在传输数据 ‘‘ 0F3C781A ‘‘ 时  ,每个字节对应的数据即为上表中十六进制数对应的二进制数。

发送数据 0000_1111 0011_1100 0111_1000 0001_1010
字节数          1           2          3          4

(3) 字符: 串口在以字符格式收发数据时 ,因为每个字符在 ASCII 码表中对应成二进制码 都是8bit 宽的二进制数 ,正好为一个字节,所以默认先将该字符转换为对应的二进制数然后发送,相当于每个字节发送一个字符。串口接收端如果是二进制格式,那么将直接显示;如果为十六进制,即显示该字符在ASCII码表中对应的2位十六进制数 ;如果串口接收端以字符格式显示的话即将接收到的二进制数按照 ASCII 码表再转换为对应的字符
(该字符与发送的字符相同) 然后显示。

同样,以字符的格式发送数据 ‘‘ 0F3C781A ‘‘ 时 ,首先按照ASCII码表 (网址:http://www.asciima.com/) 找到每个字符对应的二进制和十六进制数如下表:

字符 0 F 3 C 7 8 1 A
对应的16进制数 0x30 0x46 0x33 0x43 0x37 0x38 0x31 0x41
对应的2进制数 0011_0000 0100_0110 0011_0011 0100_0011 0011_0111 0011_1000 0011_0001 0100_0001

那么以字符格式发送该段数据后,分别以字符格式、16进制、二进制格式接收到的数据为:

接收字节数 1 2 3 4 5 6 7 8
接收字符 0 F 3 C 7 8 1 A
接收16进制数 0x30 0x46 0x33 0x43 0x37 0x38 0x31 0x41
接收二进制数 0011_0000 0100_0110 0011_0011 0100_0011 0011_0111 0011_1000 0011_0001 0100_0001

讲到这,想必读者对于串口收发数据的三种格式的区别已经清晰明了了吧。

串口收发数据时字符、十六进制、二进制格式详细区分

时间: 2024-08-10 19:11:42

串口收发数据时字符、十六进制、二进制格式详细区分的相关文章

stm32 串口收发数据不稳定问题

用中断接收串口数据时,有时会存在串口接收数据错乱的问题,此时需要配置的时候为 uint8 u8Data; if ( USART_GetITStatus(USART1,USART_IT_RXNE) == SET ) { USART_ClearITPendingBit(USART1,USART_IT_RXNE);  //实际测试,先清除后存在,效果很好 u8Data=USART_ReceiveData(USART1); if (bUsart1ReFlag == 0) { g_s8RxDebugBuf

linux中如何读取串口收发数据

使用 cat /dev/ttySAC1

串口发送数据——字符串发送与十六进制发送的区别

转自:http://blog.csdn.net/wityy/article/details/8234739 串口发送数据——字符串发送与十六进制发送的区别 在使用串口发送数据时可以选择字符串发送或者十六进制发送,通常情况下我们习惯选用字符串发送数据.关于两者的区别,需要从计算机存储数据的格式说起. 在计算机中,数据是以二进制的形式存储的,例如十进制 1(10)在计算机中用 0000 0001(2)来表示.我们在用串口发送数据的时候首先将待数据转换为对应的ASCII码,然后再将这些ASCII码按照

收发数据的原理(下)

因为网络原理不是三言两语可以讲完,如果读者很忙,可以直接拉到最底下,看总结,知道个大概,再回头细读此文章.感谢关注.废话不多说,直接进入主题.在上篇我们已经讲了TCP收发数据的前两步,接下来是最后两步. 将HTTP消息传给协议栈 上篇讲到控制流程从 connect 回到应用程序之后,就到了数据收发阶段. 数据收发数据是从应用程序调用write将要发送的数据交给协议栈开始的,协议栈收到数据后执行发送操作,这一操作包含如下要点. 首先,协议栈并不关心应用程序传来的数据是什么内容.应用程序调用writ

python基本数据类型(字节字符十进制十六进制二进制转换)

#公共功能 # 索引:只能取一个元素 # 切片:取多个元素 #len:计算长度 #for name='李露' #utf-8 一个汉字三个字节 for i in name: print(i) bytes_list=bytes(i,encoding='utf-8') #默认输出十六进制 for b in bytes_list: print(b) #循环的时候默认输出十进制 #3.5 for循环的时候,循环的每个元素时字符 #字符->字节 #bytes() #utf-8->3字节 #gbk->

导入来自早期版本的 SQL Server 的本机格式数据和字符格式数据

导入来自早期版本的 SQL Server 的本机格式数据和字符格式数据 在 SQL Server 2014 中,您可以通过将 bcp 与 -V 开关一起使用,从 SQL Server 2000.SQL Server 2005.SQL Server 2008.SQL Server 2008 R2 或 SQL Server 2012 中导入本机和字符格式数据. -V 开关将使 SQL Server 2014 使用指定的 SQL Server 早期版本中的数据类型,并且数据文件格式与早期版本中的格式相

HTTP 请求方式: GET和POST的比较当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。

什么是HTTP? 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议. HTTP在客户端和服务器之间以request-response protocol(请求-回复协议)工作. GET - 从指定的服务器中获取数据 POST - 提交数据给指定的服务器处理 GET方法: 使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送到服务器: /test/demo_form.jsp?name1=value1

STM32F407的串口采用DMA收发数据

?? STM32F407的串口采用DMA收发数据 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN8 开发环境:MDK5.13 mcu: stm32f407VGT6 说明: 之前用STM32F103实现DMA收发串口数据,现在项目中采用STM32F407,所以将此机制移植到F4上. STM32F103上用DMA收发串口数据文章: STM32的串口采用DMA方式发送数据测试 STM32的串口采用DMA方式接收数据测试 源代码: 串

android4.2串口jni收发数据(基于自定义协议)

代码已经验证过,没问题 ! 代码层次结构: |-----serial_communication_class--- |                     |-------src--------- |                                  |------com------ |                                             |----object----- |