怎么拼接中间有0x00符的字符串

liangchaoxi 2011-09-23 05:30:38
char Set_Request_1[8]={0xFE,0x00,0x00,0x43,0xE2,0x00,0x07};
char Set_Request_2[4]={0x88,0x99,0xFA};
这两个字符串 怎么拼接起来
第一个串里面有:0x00 所以 strncat和strcat 遇到就结束了拼接,所以不行,还有别的函数吗?

下面这位朋友遇到和我一样的问题,贴上来 让大家更明白我的问题,
http://topic.csdn.net/t/20050919/10/4278553.html

为什么我把结构体里的数据转化成字符串,通过串口发送,当遇到0x00,收到的数据就停止了,我该怎么解决这个问题?谢谢
那我该怎么办呢,我得结构体里有很多赋值等于0x00的,而且结构体定义的用BYTE,WORD定义的,那我应该怎么把这个包发送过去那

...全文
1113 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangchaoxi 2011-10-09
  • 打赏
  • 举报
回复
解决了,是我当初对memcpy函数函数认识不够。 下面就可以了,谢谢大家~

char WirelessM[50]={0};
char Mac_To_Mac_Com_1[7]={0xFE};
memcpy( WirelessM,Mac_To_Mac_Com_1,1);
char Mac_To_Mac_Com_2[5]={0x01,0x11,0x01,0x00,0x02};
memcpy( WirelessM+1,Mac_To_Mac_Com_2,5);
char Mac_To_Mac_Com_3[3]={0x88,0x99,0xFA};
memcpy( WirelessM+6,Mac_To_Mac_Com_3,3);
jason-xu 2011-10-08
  • 打赏
  • 举报
回复
有0x00的不算字符串,字符串是以0x00为结束符号的,应该是数组吧
那就用memcpy函数来把两个数组的内容合成一起,不过要知道数组的长度
liangchaoxi 2011-10-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 schlafenhamster 的回复:]
把结构体里的数据转化成字符串就不会有0x00,因为数据0=“0”即0x30
你的转换有问题。
[/Quote]
研究一下
schlafenhamster 2011-09-26
  • 打赏
  • 举报
回复
把结构体里的数据转化成字符串就不会有0x00,因为数据0=“0”即0x30
你的转换有问题。
liangchaoxi 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 northcan 的回复:]

1 拼接字符串用sprintf函数试试。

2 为什么我把结构体里的数据转化成字符串,通过串口发送,当遇到0x00,收到的数据就停止了。
a 看看串口参数配置
b 单步调试下你的程序,看看到底是串口遇到0就不接着发送了,还是你的数据字符串什么的到0就没有了,被截断了。
[/Quote]
试了一下,sprintf遇到0x00同样会停止
liangchaoxi 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jennyvenus 的回复:]

memcpy之类的了,而且尽量去除字符串的概念,只有数据的概念。
[/Quote]memcpy 这个函数是复制函数,并不合适,我们现在要做的是拼接,看了一下觉得NorthCan提到的sprintf比较可行。

实际上我的要做的是
char Set_Request_1[8]={0xFE,0x00,0x00,0x43,0xE2,0x00,0x07};
char My_ID[5](是一个变量,运行中复制)
char Set_Request_2[4]={0x88,0x99,0xFA};

把这个三个数组拼接起来,并且发送出。
liangchaoxi 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mhbbcrcpj 的回复:]

就不能自己写个函数么?
[/Quote]
如果系统的函数可以满足就尽量不要自己去写了,因为我们要处理的数据很多,调用的很多,所以尽量要考虑到代码的简洁性和通用性
liangchaoxi 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 great_bug 的回复:]

既然有0,那就不能叫string,只能当BIN处理,处理时指定长度才行.
[/Quote]
请问可以说的具体一点吗?
Great_Bug 2011-09-25
  • 打赏
  • 举报
回复
既然有0,那就不能叫string,只能当BIN处理,处理时指定长度才行.
liangchaoxi 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jennyvenus 的回复:]

您可能刚入行不久
[/Quote]是刚刚入,从来没有学过C语言。
schlafenhamster 2011-09-25
  • 打赏
  • 举报
回复
char Set_Request_1[8]={0xFE,0x00,0x00,0x43,0xE2,0x00,0x07};
char Set_Request_2[4]={0x88,0x99,0xFA};

这两个根本不是字符串!
C中字符串必须以0结尾,即sz
用户 昵称 2011-09-25
  • 打赏
  • 举报
回复
您可能刚入行不久
MHBBCRCPJ 2011-09-24
  • 打赏
  • 举报
回复
就不能自己写个函数么?
用户 昵称 2011-09-24
  • 打赏
  • 举报
回复
memcpy之类的了,而且尽量去除字符串的概念,只有数据的概念。
91program 2011-09-24
  • 打赏
  • 举报
回复
一般对串口驱动来说,0是可以正常发送的。不能发,可能是你程序按字符串处理了,所以遇到 0 就不再继续发啦。

字符串中有 0,只能用循环来连接,字符串操作函数是不能使用的。
northcan 2011-09-24
  • 打赏
  • 举报
回复
1 拼接字符串用sprintf函数试试。

2 为什么我把结构体里的数据转化成字符串,通过串口发送,当遇到0x00,收到的数据就停止了。
a 看看串口参数配置
b 单步调试下你的程序,看看到底是串口遇到0就不接着发送了,还是你的数据字符串什么的到0就没有了,被截断了。
alun666 2011-09-24
  • 打赏
  • 举报
回复
学习一下

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧