我现在知道 内存块首地址 和 大小 怎么 得到里面的二进制数据
Image image(L"f:\\abc.bmp");//加载图片
CLSID encoderClsid;
//1. 获取JPEG图片格式CLSID
GetEncoderClsid(L"image/jpeg",&encoderClsid);
//2.创建流
IStream *pStream;
CreateStreamOnHGlobal(NULL,TRUE,&pStream);
//以JPEG图片格式储存数据到流中
image.Save(pStream,&encoderClsid);
//获得与流对应的内存句柄
HGLOBAL hMem;
GetHGlobalFromStream(pStream,&hMem);
//获得内存块大小
DWORD dwSize=GlobalSize(hMem);
//再创建一块内存句柄,用于目标流
HGLOBAL hDesMem=GlobalAlloc(GMEM_MOVEABLE,dwSize);
IStream *pDesStream;
CreateStreamOnHGlobal(hDesMem,TRUE,&pDesStream);
//获得内存块首地址
BYTE *pImgData=(BYTE *)GlobalLock(hMem);
BYTE *pDesData=(BYTE *)GlobalLock(hDesMem);
//3.复制内存,如果通过网络,就把pImgData里的数据发送过去。
CopyMemory(pDesData,pImgData,dwSize);
得到的2进制数据我是想要socket发送出去 二进制 c++ socket
[解决办法]
sockfd=socket(...)//传递相应参数
write(sockfd, msg, strlen(msg));//发送消息
具体细节我也记不准喽,你查阅下相关网络编程资料
[解决办法]
fopen(); //获取
fread(); //读
fwrite(); //写
[解决办法]
memcpy如何?从指定的首地址,拷贝指定长度的字节数据
[解决办法]
void *memcpy(void *dest, const void *src, size_t n);
//注意覆盖内存问题
void *memmove(void *dest, const void *src, size_t n);
[解决办法]
sockfd=socket(...)//传递相应参数
write(sockfd, msg, strlen(msg));//发送消息
具体细节我也记不准喽,你查阅下相关网络编程资料
我主要就是想知道 怎么 根据 内存块首地址 和 大小 获取数据
发送我已经写好了
void *memcpy(void *dest, const void *src, size_t n);
//注意覆盖内存问题
void *memmove(void *dest, const void *src, size_t n);
大神 我用这两个函数返回的也是个指针,该怎么取到实际数据呢?
不用是返回值
这个函数是将 src里的n个字节的数据拷贝到dest这片内存地址里!
然后你直接取dest里的数据就好了阿!
[解决办法]
sockfd=socket(...)//传递相应参数
write(sockfd, msg, strlen(msg));//发送消息
具体细节我也记不准喽,你查阅下相关网络编程资料
我主要就是想知道 怎么 根据 内存块首地址 和 大小 获取数据
发送我已经写好了
void *memcpy(void *dest, const void *src, size_t n);
//注意覆盖内存问题
void *memmove(void *dest, const void *src, size_t n);
大神 我用这两个函数返回的也是个指针,该怎么取到实际数据呢?
不用是返回值
这个函数是将 src里的n个字节的数据拷贝到dest这片内存地址里!
然后你直接取dest里的数据就好了阿!
直接用 char[] = dest 就行了么?
不行的, 不能直接等
char src[100] = "AAAAAAAAAAAAAAAAAAAAAAAAAAAA";
char buf[100] = {0};
memmove(buf, src, sizeof(src));
//这样 src里面的数据就拷贝到buf里了
[解决办法]
总不至于用ReadProcessMemory吧。
[解决办法]
只要没有跨进程, 有了地址和长度, 那你不就已经可以完全直接访问这个内存区域了, 发就直接发撒, 还需要读取吗??
假设你使用 send发送数据.
send(s, (char*)pDestData, len,0);
[解决办法]
只要没有跨进程, 有了地址和长度, 那你不就已经可以完全直接访问这个内存区域了, 发就直接发撒, 还需要读取吗??
假设你使用 send发送数据.
send(s, (char*)pDestData, len,0);
谢谢你的回答,现在需求变了 IStream 里的数据 怎么 写入到文件呢?
参考这个http://bbs.csdn.net/topics/60243141