• 4373阅读
  • 7回复

[提问]unsigned char* 如何获取size ? [复制链接]

上一主题 下一主题
离线dafei2015
 

只看楼主 倒序阅读 楼主  发表于: 2019-01-30
关键词: QByteArray
    代码如下:
   QByteArray To_Write_bytes;      
  To_Write_bytes[0]=0x01;    
  To_Write_bytes[1]=0x00;    
  To_Write_bytes[2]=0x03;      
  To_Write_bytes[3]=0x00;    
  To_Write_bytes[4]=0x00;
  To_Write_bytes[5]=0x00;  
  To_Write_bytes[6]=0x02;  
   unsigned char *writtenbuffer= (unsigned char *)To_Write_bytes.data();  
   qDebug()<<sizeof(*writtenbuffer);//返回1         
   qDebug()<<sizeof(writtenbuffer);//返回4  
   qDebug()<<strlen((char *)writtenbuffer);   //返回1
哪位老铁能指点下,应该返回7才是,我试了很多办法
离线solo_wang

只看该作者 1楼 发表于: 2019-01-31
这种char*类型数据,都是要你自己得知道size才可以的。sizeof(*p)返回的第一个元素的size,实际上就是sizeof(u_char);sizeof(p)是计算一个指针的大小,一般32位运行环境就是4;strlen(p)遇到'\0'就结束了,所以返回1。
离线gspite

只看该作者 2楼 发表于: 2019-01-31
1楼正解
离线automoblie0

只看该作者 3楼 发表于: 2019-01-31
填入16进制值,转换后貌似有的是结尾符有的是不可见字符。
尝试填个字符之类,如 QByteArray To_Write_bytes("hello,world!");

这样转换unsigned char *,观察一下内存应该有数据
离线automoblie0

只看该作者 4楼 发表于: 2019-01-31
楼主想想。第一次你填入0x00。转换char*后是结尾符号。应该是啥都没有的。
离线dbzhang800

只看该作者 5楼 发表于: 2019-02-01
在C/C++里面,这个东西怎么都不会返回7的

除非你是数组首地址(注意,不能让它退化为指针。比如你通过直接赋值或函数参数传递以指针方式到其他地方)

char bytes[]={'1','2','3','4','\0','\0','\0'};
1条评分金钱+5
dafei2015 金钱 +5 - 2019-04-22
离线九重水

只看该作者 6楼 发表于: 2019-02-13
你们上班上到1月末啊。
好久没上QT论坛了。
有人答了,我就静静地看着就行。
离线fearlazy

只看该作者 7楼 发表于: 2019-02-14
个人博客: www.fearlazy.com 

学习使我快乐!
快速回复
限100 字节
 
上一个 下一个