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

[复制链接]
2794|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 | 显示全部楼层
不知道了……
金顶杜鹃 发表于 2016-1-26 16:45 | 显示全部楼层
看来是你服务器那边按照ASCII码发送数据了,服务器按照HEX格式发送就直接接受到十六进制的数据了
dirtwillfly 发表于 2016-1-26 19:17 | 显示全部楼层
每个字母都带一个0x,不是更好区分吗〉?每个0x后面都是一个16进制数
firstblood 发表于 2016-1-26 20:39 | 显示全部楼层
串口接收到的数据默认的就是16进制的啊
xygyszb 发表于 2016-1-26 21:07 | 显示全部楼层
这个不用设置吧,直接发16进制就可以了。
米尔豪斯 发表于 2016-1-26 21:53 | 显示全部楼层
这个是不是在串口助手上设置的hex
diweo 发表于 2016-1-27 08:13 | 显示全部楼层
是不是每次都是4个字符,而且前面2个是'0'和'x'?
 楼主| wanyisq 发表于 2016-1-27 08:53 | 显示全部楼层
diweo 发表于 2016-1-27 08:13
是不是每次都是4个字符,而且前面2个是'0'和'x'?

是这样的
 楼主| wanyisq 发表于 2016-1-27 08:54 | 显示全部楼层
dirtwillfly 发表于 2016-1-26 19:17
每个字母都带一个0x,不是更好区分吗〉?每个0x后面都是一个16进制数

TCP服务器选择是十六进制发送的 而且前缀是有0x的
 楼主| wanyisq 发表于 2016-1-27 08:55 | 显示全部楼层
金顶杜鹃 发表于 2016-1-26 16:45
看来是你服务器那边按照ASCII码发送数据了,服务器按照HEX格式发送就直接接受到十六进制的数据了 ...

服务器是选择的十六进制发送的,不知道是不是GSM模块发送时自己转换了
ywlzh 发表于 2016-1-27 09:08 | 显示全部楼层
你用的是什么上位机?能发16进制吗?你的接受这边,能解析Ascii码吗?
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]) ;
}
金顶杜鹃 发表于 2016-1-27 11:11 | 显示全部楼层
wanyisq 发表于 2016-1-27 08:55
服务器是选择的十六进制发送的,不知道是不是GSM模块发送时自己转换了

这个是不会的,GSM收到什么就给你回什么,不会自己转换为ASCII送给串口的
huarana 发表于 2016-1-27 13:20 | 显示全部楼层
服务器那边需要改改吧
 楼主| wanyisq 发表于 2016-1-27 13:22 | 显示全部楼层
ywlzh 发表于 2016-1-27 09:08
你用的是什么上位机?能发16进制吗?你的接受这边,能解析Ascii码吗?

我用的是TCP服务器管理软件 可以发送16进制  至于接受这边我是想知道为什么和发送不一样 其实ascii和十六进制都可以解析的
 楼主| wanyisq 发表于 2016-1-27 13:23 | 显示全部楼层
diweo 发表于 2016-1-27 10:57
如果我写的话,就这样写:
char buffer[4];
char HexValue;

谢谢你  转换容易  只是我想知道问题出在哪,为什么会发生这种问题  
angerbird 发表于 2016-1-27 16:30 | 显示全部楼层
楼主的意思我也不大明白的,串口接收到的数据本身就是16进制的呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

180

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部