昨天调出了发送文件的程序 发送内容只有几个字符的文件没问题 今天想往PC上发送bmp图片(是OV9650采集的一帧图片保存在开发板上的),读出的数据就不对了 只读出三个字符
我是想着open文件 read文件 一个字符一个字符的发送 在PC上再把数据导成图片 现在就是读取文件内容不对
void CTCPClientExDlg::OnOpenfile()
{
CFile MyFile;
CString m_FileName;
CFileDialog FileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,_T("All Files(*.*)|*.*||"));
if(FileDlg.DoModal()==IDOK)
{
m_FileName=FileDlg.GetPathName();
MyFile.Open (m_FileName,CFile::modeRead); //打开文件
DWORD sendlen =MyFile.GetLength() ; //得到文件长度
CHAR *szBuf=new CHAR [sendlen];//开辟存储空间
MyFile.Read ( szBuf, sendlen); //读文件
m_SendEdit.Format(_T("%s"),szBuf);
MyFile.Close (); //关闭文件
UpdateData(false); //更新编辑框显示
AfxMessageBox(_T("Read OK")); //输出读成功消息
delete []szBuf;//清除存储空间
}
}
void CTCPClientExDlg::OnSend()
{
int nErrorCode;
int cnt = 0, actlen = 0;
if (m_Socket == NULL)
return;
// UpdateData(TRUE);
int sendlen = m_SendEdit.GetLength(); /* 取得输入字符串长度 */
char *psendbuff = new char[sendlen];
for(int i = 0; i < sendlen;i++)
psendbuff = (char)m_SendEdit.GetAt(i); /* 转换为单字节字符 */
while(cnt < sendlen)
{ // 发送数据
actlen = send(m_Socket, psendbuff + cnt, sendlen - cnt, 0);
if (actlen == SOCKET_ERROR )
{
MessageBox(_T("TCP 数据发送失败!"));
nErrorCode = WSAGetLastError();
delete[] psendbuff;
return;
}
cnt = cnt + actlen;
if (cnt < sendlen)
Sleep(1000);
}
delete[] psendbuff;
}
打开bmp文件 读出来的是2个乱码和一个空格 发送到PC上是“B6 ” 大家帮忙看看啊
psendbuff = (char)m_SendEdit.GetAt(i); /* 转换为单字节字符 */
你难道是把bmp的内容放在编辑框里的么?这样肯定不行的啦
你的图片数据量多少?CHAR *szBuf=new CHAR [sendlen];//开辟存储空间 2440的内存是有限的,这个要注意
引用: 引用 2 楼 cfanlwn 的回复:
你的图片数据量多少?CHAR *szBuf=new CHAR [sendlen];//开辟存储空间? 2440的内存是有限的,这个要注意
图片是640x480的 大概600K read bmp文件后 szBuf里存放的是什么呢 二进制数?
才看见你这样做的。。你难道不知道字符串是以什么结尾的?你把一个字符数组赋值为一个字符串,就算本身有100个字节,只要中间某处有个'\0'字符,那个字符串也只能取到那为止,你看看bmp文件的格式,就能明白为什么你发出那么几个字节了。