鱼C论坛

 找回密码
 立即注册
查看: 6021|回复: 7

VC++读取内存然后显示成浮点数的问题

[复制链接]
发表于 2013-8-4 12:31:53 | 显示全部楼层 |阅读模式
10鱼币
想读取一个游戏的一个参数,控件名是 m_fuzhong,     类型float这两个内存中存放的都是整形,但是需要做一个除法,单独获取显示都是正常的,但是做除法之后值是不对的。到底哪里有错误?


        DWORD PID;
        float all;  //存放总负重
        float part;    //存放当前负重
    DWORD really;
        HWND hwnd=::FindWindow(NULL,"Droiyan Online");
        if(!hwnd)
        {
                MessageBox("Please run the game!");
            return;
        }

        ::GetWindowThreadProcessId(hwnd,&PID);
        HANDLE processH=::OpenProcess(PROCESS_ALL_ACCESS,NULL,PID);

        LPCVOID pall=(LPCVOID)0x006606D8;//总负重
        LPCVOID ppart=(LPCVOID)0x006606DA;//当前负重

        LPVOID  nall=(LPVOID)&all;
        LPVOID  npart=(LPVOID)∂

        ::ReadProcessMemory(processH,pall,nall,2,&really);
        ::ReadProcessMemory(processH,ppart,npart,2,&really);

        m_fuzhong=(float)part/(float)all;  //获取到的当前负重除以总负重 ,值就不对了,这是为什么?
UpdateData(false);


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-4 13:56:23 | 显示全部楼层
什么整型又浮点型??
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-4 14:06:43 | 显示全部楼层

话说内存中有两个地址 存的是整形,我想给他们做除法显示成浮点型,但是显示不出来,比如3/5就显示0了,我想让他显示成0.6? 明白否?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-4 14:14:05 | 显示全部楼层
本帖最后由 565123 于 2013-8-4 14:16 编辑

(float)(*((int*)(&part)))/(float)(*((int*)(&all)))
是这样吗??
话说,我对优先级不是很了解,只能加上一堆括号了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-4 14:44:13 | 显示全部楼层
楼上这样可以吧。。。

我没看楼主的程序,一堆东西,呵呵。但我以前coding时遇到需要整数转浮点时,都是 c=(1.0*A)/B 这种形式,以一个浮点数1.0开始先乘,一般可以解决问题。

不用括号也可以,我记得乘除是从左到右的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-4 15:08:24 | 显示全部楼层
改好了 我把all 和part 定义成WORD显示就正常了,定义成int是不对的
void CTttDlg::OnButton1()
{

   DWORD PID;
   WORD all;
   WORD part;

    DWORD really;
        HWND hwnd=::FindWindow(NULL,"Droiyan Online");
        if(!hwnd)
        {
                MessageBox("Please run the game!");
            return;
        }

        ::GetWindowThreadProcessId(hwnd,&PID);
        HANDLE processH=::OpenProcess(PROCESS_ALL_ACCESS,NULL,PID);


       
    LPCVOID pall=(LPCVOID)0x006606D8;//总负重
        LPCVOID ppart=(LPCVOID)0x006606DA;//当前负重


                     ::ReadProcessMemory(processH,pall,&all,2,&really);
                ::ReadProcessMemory(processH,ppart,&part,2,&really);


m_test=(float)part/(float)all;
   UpdateData(false);
}

修改后的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-4 15:12:21 | 显示全部楼层
为什么定义成int就不好用呢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-4 15:28:25 | 显示全部楼层
DWORD是无符号型的,int是有符号数
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-16 02:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表