| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1161 人关注过本帖
标题:hzk16文件无法读取
取消只看楼主 加入收藏
kaitianjian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2011-10-16
结帖率:25%
收藏
已结贴  问题点数:20 回复次数:10 
hzk16文件无法读取
最近在用mfc写一个点阵取模程序,但是hzk16文件无法读取,而.txt文件都能读取?

void CMSComDlg::ReadDataFromFile()
{
    CFile file("HZK16", CFile::modeRead|CFile::typeBinary);
    memset(cBuf, 0, 1024);
    file.Read(cBuf, 32);
    file.Close();
    Invalidate();
}
搜索更多相关主题的帖子: void file 
2012-02-27 15:03
kaitianjian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2011-10-16
收藏
得分:0 
应该不小,估计是数据格式有问题
从书上了解到,串口控件mscom的setoutput函数发送二进制数据时,要将
字节型数据存入参数变量中。

void CMSComDlg::OnSend()
{
    UpdateData();   //更新数数据参数

   ReadDataFromFile();
   m_strSendData.Format("%s", cBuf);
    _variant_t vSendData;   //定义发送数据变量
    vSendData = m_strSendData;  //转换发送数据类型

     m_ctrMSCom.SetOutput(vSendData);//发送数据
2012-02-28 12:52
kaitianjian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2011-10-16
收藏
得分:0 
今天又试了一下,改用串口类 CSerialPort.cpp,貌似可以读到数据,但只能读到一个,而且发送时没见反应


void CSerialPortComDlg::ReadDataFromFile()   //读文本数据
{
CFile file("HZK16", CFile::modeRead|CFile::typeBinary);
//    char *p = m_strSendData.GetBuffer(m_strSendData.GetLength());
    memset(cBuf, 0, 1024);
//    file.Seek(100,CFile::begin);  
    file.Read(cBuf, 32);   
    file.Close();
    Invalidate();
}

void CSerialPortComDlg::OnSend()
{
    // TODO: Add your control notification handler code here
    UpdateData();
    ReadDataFromFile();
       int i = 0;
    while(cBuf[i++])
    assert(i=1);     //貌似cBuf里只有一个元素
    m_spSerialPort.WriteToPort(cBuf);
  //  m_spSerialPort.WriteToPort((char *)(LPCTSTR)m_strSendData);
}
 
我把整个程序贴出来,里面有具体的说明
SerialPortCom.part1.rar (1000.07 KB)

SerialPortCom.part2.rar (1000.07 KB)

SerialPortCom.part3.rar (127.58 KB)
2012-02-28 19:40
kaitianjian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2011-10-16
收藏
得分:0 
32B全角空格,我不太明白?
我现在只是在测试,看能否读出32b的数据并发送出去!
2012-02-29 10:21
kaitianjian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2011-10-16
收藏
得分:0 
恩,我再看看,如果不行,就用fread()试试!
2012-03-01 13:30
kaitianjian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2011-10-16
收藏
得分:0 
改用了fread和fseek函数,直接将c语言读取自摸程序中的一段代码靠过来,却出现有得字能读完整出,如我、他,有得字只能读取一点或读不到,如“你”只能读到一个“▲“字符,纳闷啊?

void CSerialPortComDlg::ReadDataFromFile()
{   
     unsigned  char i=0xa1,j=0xa1;
     unsigned   char   qh,wh;
     unsigned  long offset;
     char *p = m_strSendData.GetBuffer(m_strSendData.GetLength());//获得汉字区位码所在指针
     unsigned   char q = p[0], w = p[1];
     qh=q-0xa0;
     wh=w-0xa0;
     offset=((qh-1)*94+(wh-1))*32L;  //计算在自摸中偏移量
     FILE *fd;
     fd=fopen( "HZK16 ", "rb ");
     fseek(fd,offset,SEEK_SET);
     memset(cBuf, 0, 1024);
     fread(cBuf,32,1,fd);   
     fclose(fd);

SerialPortCom.part1.rar (1000.11 KB)

SerialPortCom.part2.rar (1000.11 KB)

SerialPortCom.part3.rar (148.38 KB)
2012-03-03 10:54
kaitianjian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2011-10-16
收藏
得分:0 
这是c语言中的代码,跟上面的读取代码一样,却都能完整读出

c语言文件.rar (1.07 KB)
2012-03-03 10:57
kaitianjian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2011-10-16
收藏
得分:0 
好~
hzk16_all.rar (1.22 MB)
2012-03-03 13:56
kaitianjian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2011-10-16
收藏
得分:0 
我还是用一个一个的汉字测试的,有得字可以,有得字不行!
上面的“c语言文件”中所用的函数跟那个一样,但就没问题!
是不是编码有问题,MFC默认是Unicode的吗?
2012-03-03 19:44
kaitianjian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2011-10-16
收藏
得分:0 
我用内码减去a0可以取到字模,但是发送有问题,
然后我将取到的每一字节字模都加上a1,貌似可以发送了!
2012-03-04 14:36
快速回复:hzk16文件无法读取
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019259 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved