首页 新闻 会员 周边 捐助

vc char *如何转为char

0
悬赏园豆:10 [已解决问题] 解决于 2016-02-10 00:29

注意这不是一般的转换。

 http://hi.baidu.com/3582077/item/8389003485d5aec22e8ec221

  部分关键问题代码

//创建流

  IStream *pStream;
  ::CreateStreamOnHGlobal(NULL,TRUE,&pStream);
  //以JPEG图片格式储存数据到流中
  bmp.Save(pStream,&pClientDlg->m_encoderClsid);
  //获得与流对应的内存句柄
  HGLOBAL hMem;
  ::GetHGlobalFromStream(pStream,&hMem);
  DWORD dwSize=::GlobalSize(hMem);//获得内存块大小

  BYTE *pImgData=(BYTE *)GlobalLock(hMem);//获得内存块首地址*/
  //发送数据大小,告诉服务端有多少数据要发送

pImgData 现在是一个指针存放的是指针地址,dwSize 放的是大小

我需要将 pImgData指针指向的地址内容转到 char中存在字符。

在这里我曾尝试

char temp=pImgData 或  char par[65335]={NULL};     strcat(par,getimg);

以上方式均是无效的,它得到只是指向的内存首地址内容并不是数据内容"  ?? "。

问题补充:

但从示例中的

   sendto(s,(char *)pImgData,sendSize,0,(struct sockaddr *)&server, sizeof(server));

这是可以发送成功的,只是它用的是sendto函数发送了,由于我需要将数据重新编写所以不能用这个方法直接发送。需要将pImgData先存到char中处理。

gotolnc的主页 gotolnc | 初学一级 | 园豆:47
提问于:2013-08-22 21:37
< >
分享
最佳答案
0

已知:pImgData 现在是一个指针存放的是指针地址,dwSize 放的是大小

char * par = (char*)malloc(dwSize);

或者:

char par[65536] = {NULL}; // dwSize <= 65536

memcpy(par,dwSize,pImgData);

 

我再补充一句,虽然上面的方法是可行的,但是有一次内存分配,和一次内存拷贝,如果你的需求是对 pImgData 做修改,那么你可以直接使用 pImgData,例如我需要将 pImgData 中的 0 都替换为 1:

// 虽然这个转换是多余的,但是为了演示,我就假装转一下。

char * p = (char*) pImgData; // 在这里你不能把 p 当成以 \0 结尾的字符串。

for(int i=0;i<dwSize;i++)

{

    if(*p == 0)

       *p = 1;

   p++;
}

 

收获园豆:7
Launcher | 高人七级 |园豆:45050 | 2013-08-23 09:09

char * par = (char*)malloc(dwSize);

或者:

char par[65536] = {NULL}; // dwSize <= 65536

memcpy(par,dwSize,pImgData);

发现还行,得到的还是同我图中所示一样 ?? 地址内容。

gotolnc | 园豆:47 (初学一级) | 2013-08-23 20:34

老大不行啊,你看一下我的发的示例url中能参照哪个改一下,它直接使用套字节发送的,但我现在需要将这块数据放到char 来手功用http来发送,如何取出这个数据。

  //拼接请求信息
            char send_str[65335] = {NULL};
            strcat(send_str,"POST ");
            strcat(send_str,url);
            strcat(send_str," HTTP/1.1\r\n");
            strcat(send_str,"Accept: */*\r\n");
            strcat(send_str,"Accept-Language: zh-cn\r\n");
            strcat(send_str,"host:");
            strcat(send_str,hostname);
            strcat(send_str,"\r\n");
            strcat(send_str,"Content-Type: application/x-www-form-urlencoded\r\n");
            strcat(send_str,"Content-Length:");
            char len[20] = {NULL};
            sprintf(len,"%d", strlen(para));
            strcat(send_str,len);
            strcat(send_str,"\r\n");
            strcat(send_str,"Connection:close\r\n\r\n");
            strcat(send_str,para); //img=需要取出的数据pImgData变为字符
 
gotolnc | 园豆:47 (初学一级) | 2013-08-24 15:10

@gotolnc: 我不知道你到底想干啥。pImgData 指向的是长度为 dwSize 的字节数组,不是“字符串”,所以你不能认为你转成 char * 后,就能向看我这句话一样,当成字符串来看,因为你也不能使用字符串相关的操作来操作此 buffer。请你自己学习下C++中的字符串和字节数组的区别。

Launcher | 园豆:45050 (高人七级) | 2013-08-26 09:14
其他回答(1)
0

static_cast<>()

收获园豆:3
硬盘很大 | 园豆:16 (初学一级) | 2013-08-22 23:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册