zoukankan      html  css  js  c++  java
  • 串口发送数据——字符串发送与十六进制发送的区别

    转自:http://blog.csdn.net/wityy/article/details/8234739
     串口发送数据——字符串发送与十六进制发送的区别
           
            在使用串口发送数据时可以选择字符串发送或者十六进制发送,通常情况下我们习惯选用字符串发送数据。关于两者的区别,需要从计算机存储数据的格式说起。

            在计算机中,数据是以二进制的形式存储的,例如十进制 1(10)在计算机中用 0000 0001(2)来表示。我们在用串口发送数据的时候首先将待数据转换为对应的ASCII码,然后再将这些ASCII码按照二进制的方式一位一位的发送出去。

    例如我们要发送一串数据“A852010100000000A91A”,以字符串和十六进制两种方式发送:

    (1)字符串发送

             串口以字符串发送数据,首先将字符串转化为二进制,格式如下:

              0000 1010     0000 1000    0000 0110    0000 0010    0000 0000   0000 0001   0000 0000    0000 0001 

                    A                   8                  5                      2                    0                1                    0                    1

              0000 0000     0000 0000   0000 0000    0000 0000     0000 1010    0000 1001    0000 0001    0000 1010

                              0                   0                     0                   0                    A                   9                   1                   A

             然后按照8位(串口设置数据位为8位)形式将数据发送出去。

             串口接收的数据格式如下:

                  

    编号

    数据内容

    编号

    数据内容

    0

    A

    8

    0

    1

    8

    9

    0

    2

    5

    10

    0

    3

    2

    11

    0

    4

    0

    12

    A

    5

    1

    13

    9

    6

    0

    14

    1

    7

    1

    15

    A

     (2)十六进制发送数据

              串口以十六进制发送数据,首先将数据转化为:

              1010 1000     0110 0010    0000 0001     0000 0001    0000 0000    0000 0000     1010 1001     0001 1010

                  0XA8            0X52               0X01             0X01              0X00           0X00                0XA9            0X1A 

             然后按照8位(串口设置数据位为8位)形式将数据发送出去。

             串口接收的数据格式如下:

    编号

    数据内容

    编号

    数据内容

    0

    A8

    4

    00

    1

    52

    5

    00

    2

    01

    6

    A9

    3

    01

    7

    1A

              仔细对照接收结果就很容易明白字符串发送和十六进制发送的区别了。

    附转换:

    1. //转换每一个字符为正真的16进制数值  
    2.     char Widget::ConvertHexChar(char ch)    
    3.     {    
    4.         if((ch >= '0') && (ch <= '9'))    
    5.             return ch-0x30;    
    6.         else if((ch >= 'A') && (ch <= 'F'))    
    7.             return ch-'A'+10;    
    8.         else if((ch >= 'a') && (ch <= 'f'))    
    9.             return ch-'a'+10;    
    10.         else return (-1);    
    11.     }    
  • 相关阅读:
    使用 Spring data redis 结合 Spring cache 缓存数据配置
    Spring Web Flow 笔记
    Linux 定时实行一次任务命令
    css js 优化工具
    arch Failed to load module "intel"
    go 冒泡排序
    go (break goto continue)
    VirtualBox,Kernel driver not installed (rc=-1908)
    go运算符
    go iota
  • 原文地址:https://www.cnblogs.com/changbaishan/p/7129146.html
Copyright © 2011-2022 走看看