Python+ctypes操纵内存中数据修改整数变量的值 |
您所在的位置:网站首页 › 董付国python程序设计课后答案 › Python+ctypes操纵内存中数据修改整数变量的值 |
开学第一课:拜托,一定不要这样问Python问题 中国大学MOOC“Python程序设计基础”免费学习地址 2020年秋季学期Python教材推荐与选用参考 推荐图书: 《Python程序设计(第3版)》,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年1月第6次印刷,山东省一流本科课程“Python应用开发”配套教材,清华大学出版社2020年度畅销图书(本书第二版为2019、2020年度畅销图书) 京东购买链接:https://item.jd.com/12668739.html 天猫、当当均有销售,可以选择自己常用平台搜索“董付国 第3版”找到本书。 配套资源:教学大纲、电子教案、微课视频、PPT课件、例题源码、习题答案、考试系统。 适用专业:计算机、网络工程、软件工程以及相关专业。 适用学时:>=64 页数:381 定价:59.8 微课视频:77个 教学大纲:《Python程序设计(第3版)》配套教学大纲 习题答案:《Python程序设计(第3版)》课后习题答案 目录(二级) 第1章 基础知识/1 1.1 如何选择Python版本 1.2 Python安装与简单使用 1.3 使用pip管理扩展库 1.4 Python基础知识 1.5 Python代码编写规范 1.6 Python文件名 1.7 Python程序的__name__属性 1.8 编写自己的包 1.9 Python快速入门 1.10 The Zen of Python 第2章 Python数据结构/31 2.1 列表 2.2 元组 2.3 字典 2.4 集合 2.5 其他数据结构 第3章 选择与循环/67 3.1 运算符与条件表达式 3.2 选择结构 3.3 循环结构 3.4 break和continue语句 3.5 综合运用 第4章 字符串与正则表达式/83 4.1 字符串 4.2 正则表达式 第5章 函数设计与使用/115 5.1 函数定义 5.2 形参与实参 5.3 参数类型 5.4 return语句 5.5 变量作用域 5.6 lambda表达式 5.7 案例精选 5.8 高级话题 第6章 面向对象程序设计/138 6.1 类的定义与使用 6.2 类的方法 6.3 属性 6.4 特殊方法与运算符重载 6.5 继承机制 第7章 文件操作/158 7.1 文件基本操作 7.2 文本文件基本操作 7.3 二进制文件操作 7.4 文件级操作 7.5 目录操作 7.6 案例精选 第8章 异常处理结构与程序调试/181 8.1 基本概念 8.2 Python异常类与自定义异常 8.3 Python中的异常处理结构 8.4 断言与上下文管理 8.5 使用IDLE调试代码 8.6 使用pdb模块调试程序 第9章 GUI编程/199 9.1 tkinter基础 9.2 tkinter精彩编程 第10章 网络程序设计/230 10.1 计算机网络基础知识 10.2 UDP和TCP编程 10.3 Socket编程案例精选 10.4 网页内容读取与网页爬虫 第11章 安卓平台的Python编程/248 11.1 QPython简介 11.2 安卓应用开发案例 第12章 Windows系统编程/254 12.1 注册表编程 12.2 创建可执行文件 12.3 调用外部程序 12.4 创建窗口 12.5 判断操作系统版本 12.6 系统运维 第13章 多线程与多进程编程/273 13.1 threading模块 13.2 Thread对象 13.3 线程同步技术 13.4 多进程编程 第14章 数据库编程/294 14.1 SQLite应用 14.2 访问其他类型数据库 第15章 多媒体编程/306 15.1 图形编程 15.2 图像编程 15.3 音乐编程 15.4 语音识别 15.5 视频处理和摄像头接口调用 第16章 逆向工程与软件分析/328 16.1 主流项目与插件简介 16.2 IDAPython与Immunity Debugger编程 16.3 Windows平台软件调试原理 16.4 案例精选 第17章 科学计算与可视化/349 17.1 numpy简单应用 17.2 scipy简单应用 17.3 matplotlib简单应用 17.4 数据分析模块pandas 17.5 统计分析模块statistics 第18章 密码学编程/377 18.1 安全哈希算法 18.2 对称密钥密码算法DES和AES 18.3 非对称密钥密码算法RSA与数字签名算法DSA ======================= 对Python有一定了解的朋友都知道,Python中的变量不直接存储值,而是存储的值的引用(在CPython的实现中也就是内存地址),也可以把变量名看作是对应的内存地址上贴的标签。 如果需要查看变量对应的内存地址,可以使用内置函数id(),例如: 另外,大家也都知道Python中的数字可以非常大,在内存中占用的字节数根据具体的数值大小来确定,并不是固定大小的内存空间。如果想知道一个整数在内存中占用多少个字节,可以使用标准库sys中的函数getsizeof()函数,例如: 如果想要知道整数在内存中具体是如何存储的,可以使用标准库ctypes中的函数string_at()查看内存中的内容,例如: 整数在内存中存储时,会有24个字节的头部,然后才是真正的数据(上图中绿线标记),在24个字节的头部中,以小端模式(低位字节存到低地址,高位字节存到高地址)存储的第17-24个字节(上图中红线标记)表示整数真正的数据占用的字节数是4字节的多少倍(例如,1表示4字节,2表示8字节,3表示12字节),下图演示了小端模式中整数的存储方式: 下图演示了大端模式中整数的存储方式: 基于以上分析,可以通过直接操作内存数据的方式来修改一个整数的值,在下面的代码中,生成两个随机数,然后把其中一个整数的内存中的数据修改为另一个整数的内存数据,从而实现修改数值而不改变内存地址的目的。程序中重复执行了10000次,对20000个整数进行了测试,都实现了预期的功能。 参考代码: 如果想修改字符串变量的内存数据,可以参考下面的代码: 温馨提示: 关注微信公众号“Python小屋”,在公众号后台发送消息“大事记”可以查看董付国老师与Python有关的重要事件;发送消息“教材”可以查看董付国老师出版的Python系列教材(累计印刷超过120次)的适用专业详情;发送消息“历史文章”可以查看董付国老师推送的超过1000篇原创技术文章;发送消息“会议”或“培训”可以查看近期董付国老师的培训安排;发送消息“微课”可以查看董付国老师免费分享的超过500节Python微课视频;发送消息“课件”可以查看董付国老师免费分享的Python教学资源;发送消息“小屋刷题”可以下载“Python小屋刷题神器”,免费练习1318道客观题和238道编程题,题库持续更新;发送消息“编程比赛”了解Python小屋编程大赛详情。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |