我的数据包的定义
class CPack
{
public:
char m_begin;//包开始
short m_len;//包长
int m_Flash_BeginAddress;//不用管
byte m_data[DATAMAX];//1024
unsigned char m_chk;
char m_end;//包结束
}
CSerialPort port;//用别人的类
port.Open(4, 115200, CSerialPort::NoParity, 8, CSerialPort::OneStopBit, CSerialPort::XonXoffFlowControl);//打开CPack onepack;
CFile fileToRead;
fileToRead.Read(&onepack.m_data[0],DATAMAX);//从文件读数据port.Write(&onepack.m_data[0], DATAMAX);//写到串口//从串口读入
CPack receivingPack;
port.Read(&receivingPack.m_data[0],DATAMAX);
writeAfile.Write(&receivingPack.m_data[0],DATAMAX);//写成文件现在如果是二进制的文件的话生成的文件和读入的有区别,而英文字符的就没问题
代码是列出了重要的,大家帮我分析一下。
class CPack
{
public:
char m_begin;//包开始
short m_len;//包长
int m_Flash_BeginAddress;//不用管
byte m_data[DATAMAX];//1024
unsigned char m_chk;
char m_end;//包结束
}
CSerialPort port;//用别人的类
port.Open(4, 115200, CSerialPort::NoParity, 8, CSerialPort::OneStopBit, CSerialPort::XonXoffFlowControl);//打开CPack onepack;
CFile fileToRead;
fileToRead.Read(&onepack.m_data[0],DATAMAX);//从文件读数据port.Write(&onepack.m_data[0], DATAMAX);//写到串口//从串口读入
CPack receivingPack;
port.Read(&receivingPack.m_data[0],DATAMAX);
writeAfile.Write(&receivingPack.m_data[0],DATAMAX);//写成文件现在如果是二进制的文件的话生成的文件和读入的有区别,而英文字符的就没问题
代码是列出了重要的,大家帮我分析一下。
但在你的代码中看不出你的读/写模式是用2进制的,如果它以字符的方式读/写,那非ascii码的文件肯定会错
writeAfile.Write(&receivingPack.m_data[0],DATAMAX);//写成文件
你用port.Read(&receivingPack.m_data[0],DATAMAX)读数据,
能保证每次读串口都能读到DATAMAX 字节的数据么?如果不能,你写文件每次都写这么多(DATAMAX)数据当然会出现问题。
if (m_Ports.InitPort(this,mycom,4800))
{
m_Ports.StartMonitoring();
}
// OnCom事件
BYTE ppp[5120];//接收缓冲,全局变量
int n;
ppp[n]=(BYTE)ch;
if(ch!=NULL)
{
//char buf[10];
//sprintf(buf,"%02x",(char)ch);
m_edit_rec+=(char)ch; // m_edit_rec+=buf; //16进制显示
}// 写文件
void CMycomDlg::WriteFile(CString wfilename)
{
CFile file;
BYTE WriteBuf[5120];
// char ReadBuf[100]; if( !file.Open(wfilename,CFile::modeWrite|CFile::modeCreate))
{
ShowMsg("写文件不能打开");
}
memset(WriteBuf,0,sizeof(WriteBuf));
int j=0;
for(int i=1; i<=n-20; i++)
{
WriteBuf[j]=ppp[i];
j++;
}
file.Write(WriteBuf,sizeof(WriteBuf));
memset(WriteBuf,0,sizeof(WriteBuf));
file.Close();
}你看看能不能帮到你