现在的问题是:
以十六进制CString型存入tet文件里没有换行,而已字节型存入txt文件却有换行。
我最后是要将data.txt里的数据转换成JPEG图片显示出来的。
以下是实现将缓冲区数据存入TXT文件的代码:
void CCommWizardDlg::OnOnCommCommctrl() 
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE Pic[30000];
BYTE rxdata[30000]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp,strtemp1,strReceiveData,strXX,strYY;
char* chXX;char* chYY;


//if(bReceive)
//{
if(m_Com.GetCommEvent()==2)     //事件值为2表示接收缓冲区内有字符
{
temp++;
variant_inp = m_Com.GetInput();   //读缓冲区
safearray_inp = variant_inp;           //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组

for(k=0;k<len;k++)             //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k);      //字符型
BYTE bt1=*(char*)(rxdata+k-1);
if(m_nInputMode == 2)
{
strtemp.Format("%02X ",bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
    strtemp1.Format("%02X ",bt1);
}
else 
{
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
    strtemp1.Format("%c",bt1);
}
m_strReceive = m_strReceive + strtemp;    //加入接收编辑框对应字符串

// ////
//确定读取图片数据要发送的指令
////
/////////////返回 图片数据时
if((strtemp1==_T("FF "))&&(strtemp==_T("D8 ")))
{

in.open("data.txt",ios::trunc);
inHex.open("Hexdata.txt",ios::trunc);
flag1=true;
in<<rxdata[k-1];

                
}
if((strtemp1==_T("FF "))&&(strtemp==_T("D9 ")))
{ Pic[count]=rxdata[k];
Pic[count+1]=rxdata[k+1];
inHex<<strtemp1;
inHex<<strtemp;
inHex.close();
in<<rxdata[k];

flag1=false;
Picflag=true;
//in<<temp;
in.close();
//int j=temp;

}
if(flag1)
{

inHex<<strtemp1;

in<<rxdata[k];
Pic[count]=rxdata[k];
count++;
//if(in==NULL)
 //{AfxMessageBox("存取TXT文件出错啦");
}
}

解决方案 »

  1.   

    tet是text吧?什么换行?楼主为什么要这么做?难以理解啊
      

  2.   

    后来我自己把这个问题解决掉了。
    in.open("data.txt",ios::trunc);
    这个默认的是TEXT方式存入的
    在Binary模式下我们必须输入'/r/n',才能起到回车换行的效果,'/r'只是回车(回到当前行的第一列),'/n'只是换行(到达下一行的当前列)。
    而在Text模式下'/r'的工作是自动完成的,当我们写一个'/n'的时候,系统会自动帮我们在其前面加上一个'/r',然后保存到文件里。
    所以,我加了一个in.open("data.txt",ios::trunc|ios::binary);以二进制方式存入,字节大小就对了。