注意这不是一般的转换。
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中处理。
已知: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++;
}
char * par = (char*)malloc(dwSize);
或者:
char par[65536] = {NULL}; // dwSize <= 65536
memcpy(par,dwSize,pImgData);
发现还行,得到的还是同我图中所示一样 ?? 地址内容。
老大不行啊,你看一下我的发的示例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: 我不知道你到底想干啥。pImgData 指向的是长度为 dwSize 的字节数组,不是“字符串”,所以你不能认为你转成 char * 后,就能向看我这句话一样,当成字符串来看,因为你也不能使用字符串相关的操作来操作此 buffer。请你自己学习下C++中的字符串和字节数组的区别。
static_cast<>()