打印

串口接收字符串转化为十六进制问题

[复制链接]
2150|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wanyisq|  楼主 | 2016-1-26 13:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
遇到一个问题,串口接收到的十六进制被分割为字符了,比如发送的是  0x01  通过串口接收存放在数组里的数据为 '0' 'x' '0' '1'  现在的问题就是怎么把这一串字符再变成一个hex格式的数字呢,如果接收的是一串字符,怎么变成若干个十六进制呢

相关帖子

沙发
pkuzhx| | 2016-1-26 13:59 | 只看该作者
你发送的是unsigned char(1)还是“0x01”?
你接收又是怎么接收的?

使用特权

评论回复
板凳
wanyisq|  楼主 | 2016-1-26 14:04 | 只看该作者
pkuzhx 发表于 2016-1-26 13:59
你发送的是unsigned char(1)还是“0x01”?
你接收又是怎么接收的?

我发送的是0x01  是通过服务器向GSM模块发送的,单片机通过串口GSM模块接收,通过观察接收数据是'0' 'x' '0' '1'

使用特权

评论回复
地板
pkuzhx| | 2016-1-26 15:17 | 只看该作者
不知道了……

使用特权

评论回复
5
金顶杜鹃| | 2016-1-26 16:45 | 只看该作者
看来是你服务器那边按照ASCII码发送数据了,服务器按照HEX格式发送就直接接受到十六进制的数据了

使用特权

评论回复
6
dirtwillfly| | 2016-1-26 19:17 | 只看该作者
每个字母都带一个0x,不是更好区分吗〉?每个0x后面都是一个16进制数

使用特权

评论回复
7
firstblood| | 2016-1-26 20:39 | 只看该作者
串口接收到的数据默认的就是16进制的啊

使用特权

评论回复
8
xygyszb| | 2016-1-26 21:07 | 只看该作者
这个不用设置吧,直接发16进制就可以了。

使用特权

评论回复
9
米尔豪斯| | 2016-1-26 21:53 | 只看该作者
这个是不是在串口助手上设置的hex

使用特权

评论回复
10
diweo| | 2016-1-27 08:13 | 只看该作者
是不是每次都是4个字符,而且前面2个是'0'和'x'?

使用特权

评论回复
11
wanyisq|  楼主 | 2016-1-27 08:53 | 只看该作者
diweo 发表于 2016-1-27 08:13
是不是每次都是4个字符,而且前面2个是'0'和'x'?

是这样的

使用特权

评论回复
12
wanyisq|  楼主 | 2016-1-27 08:54 | 只看该作者
dirtwillfly 发表于 2016-1-26 19:17
每个字母都带一个0x,不是更好区分吗〉?每个0x后面都是一个16进制数

TCP服务器选择是十六进制发送的 而且前缀是有0x的

使用特权

评论回复
13
wanyisq|  楼主 | 2016-1-27 08:55 | 只看该作者
金顶杜鹃 发表于 2016-1-26 16:45
看来是你服务器那边按照ASCII码发送数据了,服务器按照HEX格式发送就直接接受到十六进制的数据了 ...

服务器是选择的十六进制发送的,不知道是不是GSM模块发送时自己转换了

使用特权

评论回复
14
ywlzh| | 2016-1-27 09:08 | 只看该作者
你用的是什么上位机?能发16进制吗?你的接受这边,能解析Ascii码吗?

使用特权

评论回复
15
diweo| | 2016-1-27 10:57 | 只看该作者

如果我写的话,就这样写:
char buffer[4];
char HexValue;

char Char2Hex(char value)
{
  if((value>=0x30)&&(value<=0x39))  //0~9
    return value-48;
    if((value>=0x41)&&(value<=0x46))  //A~F
    return vlaue-55;
}

int main()
{
  ...
HexValue=( Char2Hex(buffer[2]) <<4 ) | Char2Hex(buffer[3]) ;
}

使用特权

评论回复
16
金顶杜鹃| | 2016-1-27 11:11 | 只看该作者
wanyisq 发表于 2016-1-27 08:55
服务器是选择的十六进制发送的,不知道是不是GSM模块发送时自己转换了

这个是不会的,GSM收到什么就给你回什么,不会自己转换为ASCII送给串口的

使用特权

评论回复
17
huarana| | 2016-1-27 13:20 | 只看该作者
服务器那边需要改改吧

使用特权

评论回复
18
wanyisq|  楼主 | 2016-1-27 13:22 | 只看该作者
ywlzh 发表于 2016-1-27 09:08
你用的是什么上位机?能发16进制吗?你的接受这边,能解析Ascii码吗?

我用的是TCP服务器管理软件 可以发送16进制  至于接受这边我是想知道为什么和发送不一样 其实ascii和十六进制都可以解析的

使用特权

评论回复
19
wanyisq|  楼主 | 2016-1-27 13:23 | 只看该作者
diweo 发表于 2016-1-27 10:57
如果我写的话,就这样写:
char buffer[4];
char HexValue;

谢谢你  转换容易  只是我想知道问题出在哪,为什么会发生这种问题  

使用特权

评论回复
20
angerbird| | 2016-1-27 16:30 | 只看该作者
楼主的意思我也不大明白的,串口接收到的数据本身就是16进制的呀

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

180

帖子

2

粉丝