AT指令通过UDP协议直接发送十六进制数 10
华为GPRS模块向服务器发送数据,UDP协议。使用AT%IPSEND="XXXX"指令,但只能作为字符发送,直接发送十六进制数怎么办?...
华为GPRS模块向服务器发送数据,UDP协议。使用AT%IPSEND="XXXX"指令,但只能作为字符发送,直接发送十六进制数怎么办?
展开
3个回答
展开全部
这个。。。为了避免在信息里不能出现保留字,所以它只能通过字符发送,比如有个0x0d 0x0a那就完了,自己写个转换函数么
void UncharToHex(char *data,unsigned char sourcedata)
{
unsigned char a = sourcedata >> 4;
data[0] = a > 9? 'A'+ a -10:'0' + a;
a = sourcedata & 0x0f;
data[1] = a > 9? 'A'+ a -10:'0' + a;
}
data是出口参数,当指针传递用- -!
void UncharToHex(char *data,unsigned char sourcedata)
{
unsigned char a = sourcedata >> 4;
data[0] = a > 9? 'A'+ a -10:'0' + a;
a = sourcedata & 0x0f;
data[1] = a > 9? 'A'+ a -10:'0' + a;
}
data是出口参数,当指针传递用- -!
展开全部
把16进制变成ASC字符串,如0xF3写成"0XF3H",接收端在变成16进制.
"0X是起始头","H"是结束,"F3"是数据.
注意:变成字符串格式后,可能会和文本中的字符串混淆,定义的头和尾越长,混淆的几率越小,但效率越低.
自己调整啦
"0X是起始头","H"是结束,"F3"是数据.
注意:变成字符串格式后,可能会和文本中的字符串混淆,定义的头和尾越长,混淆的几率越小,但效率越低.
自己调整啦
追问
你这个方法不行,0X和后面的H也被当做字符给发出去了
追答
晕.
1.发送方吧16进制的1个字节,变成你自己定义结构的字符串
如:1个16进制的F3,变成字符串"0XF3H",当然也可以变成"StF3End",随你定义.
2.接收方把字符串再转换成1个16进制的字节.
去掉头和尾,中间剩的"F3"字符串,用strtol函数就换成1个16进制的字符了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询