程序如下:
UCHAR *buffer=(UCHAR *)malloc(4096);
CString str;
int start_pos=10;
int len=16;我在buffer中某个位置开始存放的是一个字符串,开始位置start_pos和长度len都知道。问题是怎样从buffer中读出来,赋给str?我现在用:strcpy(str.GetBuffer(0), (char *)&buffer[start_pos]);能读出,但是:
1:如果字符串后接着有其他字符也会读出来,虽然可以根据长度截取,但有时会出错。
2:unsigned char * 转换为 char * 不知道会不会丢失数据?请高手帮我看看怎么样解决,或者有其他的好方法?多谢了。
UCHAR *buffer=(UCHAR *)malloc(4096);
CString str;
int start_pos=10;
int len=16;我在buffer中某个位置开始存放的是一个字符串,开始位置start_pos和长度len都知道。问题是怎样从buffer中读出来,赋给str?我现在用:strcpy(str.GetBuffer(0), (char *)&buffer[start_pos]);能读出,但是:
1:如果字符串后接着有其他字符也会读出来,虽然可以根据长度截取,但有时会出错。
2:unsigned char * 转换为 char * 不知道会不会丢失数据?请高手帮我看看怎么样解决,或者有其他的好方法?多谢了。
unsigned char * 转换为 char * 不会丢失数据
直接str = (char *)&buffer[start_pos]就行了
memcpy(str.GetBuffer(0), &buffer[start_pos], len);取出来的还是会多。-------------------------------------------
TO: luohongming(lhm)CString strTmp=buffer;
CString str=strTmp.Mid(start_pos,len);
这样估计不行,buffer前面的存放的有\0。--------------------------------------------
TO: jasonshark(没暑假了...)
字符串后可能会连续接着有其他字符。
memset(p,0,len+1);
memcpy(p,buffer+start_pos,len);
CString str=p;
delete[] p;
那你接着再str.Left()一次吧
c=buffer[start_pos+len];
buffer[start_pos+len]=0;
str.Format("%s",(buffer+start_pos));
再对MSG处理str=msg.mid(pos,n);
如果你能保证你的pos,n不了错应该没问题
char * p=new char[len+1];
memset(p,0,len+1);
memcpy(p,buffer+start_pos,len);
CString str=p;
delete[] p;
应该行。
就要结帖..
----
char * p=new char[len+1];
memset(p, 0, sizeof(char) * (len+1));
memcpy(p,buffer+start_pos,len);
CString str=p;
delete[] p;