采集数据时两个字节的数据怎么合成一个十进制的数字??

priest2010 2009-11-01 09:22:13
一个通过USB采集数据的程序中采集的数据是二进制的一个字节一个字节的,现在要把它转化成十进制,两个字节合并成一个十进制,在下面的程序中怎么修改???
BOOL CShowDlg::DrawWave()
{
CClientDC dc(this);
BOOL success = TRUE;
if (m_OpenFile.GetLength() > 0)
{
CFile file;
//打开文件读取数据
if (file.Open(m_OpenFile, CFile::modeRead | CFile::shareDenyNone))
{
DWORD size = file.GetLength();
DWORD dwBytesWritten = 0;
DWORD dwBytesRead = 0;
BYTE buf[MAX_PACKET_SIZE_READFILE];

if (file.Read(buf,115200))
{
for (int i=0;i<115200;i++)
{
int x=0;
int y=buf[i];
for (int n=0;n<289;n++)
{
if (i>400(n-1)-1,i<80+400(n-1))
{
dc.MoveTo(0,0);
dc.LineTo(x+i,y);
}
if (i>79+400(n-1),i<160+400(n-1))
{
dc.MoveTo(0,0);
dc.LineTo(x+i,y);
}
if (i>159+400(n-1),i<240+400(n-1))
{
dc.MoveTo(0,0);
dc.LineTo(x+i,y);
}
if (i>239+400(n-1),i<320+400(n-1))
{
dc.MoveTo(0,0);
dc.LineTo(x+i,y);
}
if (i>319+400(n-1),i<340+400(n-1))
{
dc.MoveTo(0,0);
dc.LineTo(x+i,y);
}
if (i>339+400(n-1),i<360+400(n-1))
{
dc.MoveTo(0,0);
dc.LineTo(x+i,y);
}
if (i>359+400(n-1),i<380+400(n-1))
{
dc.MoveTo(0,0);
dc.LineTo(x+i,y);
}
if (i>379+400(n-1),i<400+400(n-1))
{
dc.MoveTo(0,0);
dc.LineTo(x+i,y);
}
}

}
}

}
}
return TRUE;
}

还有,上面的饿程序出错了,画图一定要在void CTestView::OnDraw(CDC* pDC)这里画吗?如果是,怎么把这个函数调用到我需要的地方,如果不是,上面的函数错在哪?

请高手帮忙看一下
...全文
694 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
priest2010 2009-11-02
  • 打赏
  • 举报
回复
我把上面的代码改用CDC*pdc,但是编译的时候出错了
error C2064: term does not evaluate to a function
这是怎么回事???
怎么修改
jeff_5388 2009-11-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 priest2010 的回复:]
我修改函数为BOOL CShowDlg::DrawWave(CDC * pDC)
但是运行时说CDC * pDC出错了overloaded member function 'int (class CDC *)' not found in 'CShowDlg'

[/Quote]

头文件的声明也需要改。
gg606 2009-11-01
  • 打赏
  • 举报
回复
要看你采集的数据格式!高低字节哪个在前?
cloudyi 2009-11-01
  • 打赏
  • 举报
回复
1. 画图可以直接在OnPaint()函数中进行, 因为看你的代码应该是对话框的
2. 数据合并是说将两个字节数据按高低位合并还是将两个数相加的和, 没有描述清楚, 再次你的合并需要在哪个地方添加?
gg606 2009-11-01
  • 打赏
  • 举报
回复
#define MAKEWORD(a, b) \
WORD(BYTE(a)|(WORD(BYTE(b))<<8)
priest2010 2009-11-01
  • 打赏
  • 举报
回复
还有两个字节转十进制在上面的代码中怎么添加?
priest2010 2009-11-01
  • 打赏
  • 举报
回复
怎么改啊
huangxiaohu_coder 2009-11-01
  • 打赏
  • 举报
回复
你改函数是不是只改了CPP里的函数体哦,头文件里的声明改过没有啊
huangxiaohu_coder 2009-11-01
  • 打赏
  • 举报
回复
2字节转换10进制数, short s=(b[0]<<8)+b[1];高字节左移八位,加上低字节就可以了
priest2010 2009-11-01
  • 打赏
  • 举报
回复
我修改函数为BOOL CShowDlg::DrawWave(CDC * pDC)
但是运行时说CDC * pDC出错了overloaded member function 'int (class CDC *)' not found in 'CShowDlg'
jeff_5388 2009-11-01
  • 打赏
  • 举报
回复

你是在一个Dialog里面绘图,那就在OnPaint中。

修改你的函数:
BOOL CShowDlg::DrawWave(CDC * pDC)
绘图时使用pDC绘图


还有绘图函数是频繁调用的函数,不应该在绘图函数中加入读写文件的操作。
应该在初始化时读入数据,在绘图函数中绘图。

BYTE b[];
int a = b[0];
a = a << 8;
a = a & b[1];
huangxiaohu_coder 2009-11-01
  • 打赏
  • 举报
回复
首先画图的地方不一定必需在ONDRAW里,在你画的地方只要获得设备场景就可以画了,重绘后就在不在了,如果想让画的继续存在就需要记录你画的东西放在ONDRAW里,用INVALIDATE启动重绘,获得设备场景是
CDC* pDC=GETDC();
然后用这个DCj就可以画了哦
Fzergling 2009-11-01
  • 打赏
  • 举报
回复
#define MAKEWORD(a, b) ((WORD)(((BYTE)((DWORD_PTR)(a) & 0xff)) | ((WORD)((BYTE)((DWORD_PTR)(b) & 0xff))) << 8))
priest2010 2009-11-01
  • 打赏
  • 举报
回复
数据格式是按高地位合并的,低在前,高在后
合并后就是直接转化为十进制进行绘图
不知道行不行??
要怎么做

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧