unsigned char 数组转换为cstring?? 再问

micosun6 2008-02-17 06:07:48
unsigned char aa[1024];
CString bb="";

cout << sizeof(aa) << endl; //aa=1024
bb=CString((const char *)bufimage);
cout << bb.GetLength() << endl; //为何bb !=1024??
...全文
407 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2008-02-17
  • 打赏
  • 举报
回复
CString是字符串类,不是字符串不要用它。
  • 打赏
  • 举报
回复
那是正常现象,因为图片中\0出现的几率非常大,所以你不能用getlength取得大小
在这种情况下CString不合适,用vector<unsigned char>吧
arong1234 2008-02-17
  • 打赏
  • 举报
回复
3楼虽然能使得GetLength等于1024,在楼主不懂这两者区别的情况下,还是很危险的
arong1234 2008-02-17
  • 打赏
  • 举报
回复
很显然你没明白字符数组和字符串的区别

字符数组char buffer[1024]计算的是这个数组的空间,无论你里面存的啥,它都是1024

而字符串是根据从开始到第一个'\0'之间的长度,如果buffer保存的是'abc\0',长度就是3
因此这两者是完全不同的概念,用字符串保存可能含有字节值为0 的二进制数据也是不合法的,你就应该用一个数组加一个长度两个变量来记录,而不是借助CString
micosun6 2008-02-17
  • 打赏
  • 举报
回复
bufimage是读取的是一个图上图片,我用bufimage每次收1024个字符,可GetLength()得不到1024个
如果读取html就没问题.=1024
  • 打赏
  • 举报
回复
GetLength是以\0为结束符号的.但内容确实包含在后面了.

CString bb;

unsigned char aa[1024]="asdfhsadf\0sdfsad";
bb.GetBuffer( 1024 );

memcpy( bb.LockBuffer() , aa , sizeof(unsigned char)*1024 );
bb.ReleaseBuffer();
iambic 2008-02-17
  • 打赏
  • 举报
回复
用过strlen()吗?
  • 打赏
  • 举报
回复
你的bufimage内容是不是有\0,字符串是以\0为结束符号的.

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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