python hexdump_笨办法学 Python · 续 练习 26:`hexdump`

python hexdump_笨办法学 Python · 续 练习 26:`hexdump`练习26:hexdump你已经用xargs完成了热身,现在正在代码/审计的循环中。你现在将尝试以“测试优先”方式完成下一个挑战。这就是,你编写测试,它描述你的预期行为,然后实现该行为,直到通过测试。你将要复制hexdump工具,并尝试将你的版本的输出与真实版本匹配。这是“测试优先”开发真正有帮助的地方,因为它自动化了模仿另一个软件的流程。当你需要编写一个糟糕的软件的替代品时,这种技术非常有用。软…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

练习 26:hexdump

你已经用xargs完成了热身,现在正在代码/审计的循环中。你现在将尝试以“测试优先”方式完成下一个挑战。这就是,你编写测试,它描述你的预期行为,然后实现该行为,直到通过测试。你将要复制hexdump工具,并尝试将你的版本的输出与真实版本匹配。这是“测试优先”开发真正有帮助的地方,因为它自动化了模仿另一个软件的流程。

当你需要编写一个糟糕的软件的替代品时,这种技术非常有用。软件中的一个常见工作是处理一个项目,它的目的是使用更新的实现替换旧系统。一个例子是用一个新的、热门的 Django 系统来替换旧的 COBOL 银行系统。动机通常是,通过使用比旧系统更容易使用的东西,来使其更容易维护和扩展。如果你可以编写一组自动测试来验证旧系统的行为,然后将该测试套件用于新系统,那么你可以通过一种方法,来确认你的替换品几乎正常。相信我,这些替代工作几乎是不可能的,通常不会成功,但自动测试是有帮助的。

这个练习中,你会向你的流程添加下面这些:

在你需要实现的场景中,编写一个测试用例,运行原始的hexdump。让我们假设-C选项。你将需要使用subprocess启动它,或者简单地提前运行它,并将结果保存到加载的文件。

通过测试你的hexdump版本,然后比较结果,编写使测试工作的代码。如果他们不等价,那么你就做错了。

然后审计测试代码和你的代码。

我选择了hexdump,因为难度在于,复制其奇怪的输出格式来查看二进制数据。它的工作方式不是特别复杂。它只是匹配你需要的正确输出。这有助于你练习“测试优先”的测试。

当我说“先写一个测试”时,我的意思并不是一个庞大的test.py文件,它具有所有的函数和大量的虚构代码。我的意思是我以前教过的东西。编写一个小型测试用例 – 也许只是一个测试函数的1/10,然后编写代码使其正常工作,然后在两者之间来回跳动。你越了解代码,你就可以写出越多的测试用例,但不要写一堆测试代码,并没有东西来运行它。而是要逐步编写。

挑战练习

当你想要查看不是可见文本的文件内容时,hexdump命令很有用。它以各种有用的格式显示文件中的字节,包括十六进制,八进制,并且后面带有 ASCII 输出。实现自己的hexdump的难度不是读取数据,甚至不是将其转换为不同的格式。你可以使用 Python 中的hex,oct,int和ord函数轻松地执行此操作。原始的格式化字符串运算符也很有用,因为它为固定精度的八进制和十六进制格式化提供了选项。

真正的困难在于为每个不同的选项正确格式化输出,以便它能够正确流动并适合屏幕。以下是Python .pyc文件的hexdump -C输出的前几行:

真正的困难在于为每个不同的选项正确格式化输出,以便它能够正确打印并适合屏幕。以下是Python .pyc文件的hexdump -C输出的前几行:

00000000 03 f3 0d 0a f0 b5 69 57 63 00 00 00 00 00 00 00 |……iWc…….|

00000010 00 03 00 00 00 40 00 00 00 73 3a 00 00 00 64 00 |…..@…s:…d.|

00000020 00 64 01 00 6c 00 00 6d 01 00 5a 01 00 01 64 00 |.d..l..m..Z…d.|

00000030 00 64 02 00 6c 02 00 6d 03 00 5a 03 00 01 64 03 |.d..l..m..Z…d.|

00000040 00 65 01 00 66 01 00 64 04 00 84 00 00 83 00 00 |.e..f..d……..|

这个“规范”格式化的手册页说:

以十六进制显示输入偏移量。所以 10 不是十进制中的 10,它是十六进制。你知道十六进制吗?

十六个空格分隔的,两列十六进制字节。这是转换为十六进制的每个字节。多少列代表一个字节?

然后以%_p格式显示相同的十六个字节,看起来像 Python 格式化占位符,但它专用于 hexdump。你需要阅读更多手册页,来了解其含义。

之后hexdump也可以从stdin输入接收输入,这意味着你可以将东西使用管道连接到它:

echo “Hello There” | hexdump -C

这会在我的 macOS 上产生如下输出:

00000000 48 65 6c 6c 6f 20 54 68 65 72 65 0a |Hello There.|

0000000c

请注意,最后一行有一个字符c?猜猜看这是什么。

这就是格式化和输出,它比较困难,你的任务是尽可能复制它,这就是为什么这个练习的开头让你以“测试优先”的方式工作。创建测试,将你的数据扔给hexdump将会更容易,并将其与真正的hexdump进行比较,直到它开始工作。

研究性学习

研究od命令,看看你的hexdump代码是否可以复用于od的实现。如果可以的话,可以制作一个他们都使用的库。

深入学习

有人主张只做“测试优先”的开发,但我相信没有永远适用的技术。当我从用户的角度测试软件的交互时,我更喜欢写测试。我将编写测试,它描述了用户与软件的交互,然后实现软件。这是你所做的事情,因为你正在测试,用户如何从你的hexdump命令行调用中看到输出。

对于其他类型的编程任务,决定首先写测试还是编写代码是荒谬的,只会扼杀你解决问题的能力。自动化测试是简单的工具,你是一个聪明的人,有权力尝试使用工具,但你认为他们将在每种情况下都能最好地工作。任何告诉你区别的人可能是一个无理取闹的人,实际上并不擅长编程。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/191173.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java的前端还是后端_java语言是开发前端还是后端的[通俗易懂]

    java的前端还是后端_java语言是开发前端还是后端的[通俗易懂]java语言是开发前端还是后端的发布时间:2020-06-2616:01:18来源:亿速云阅读:105作者:Leahjava语言是开发前端还是后端的?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。java不是前端,是后端。Java语言是最常见的后端开发语言之一,Java语言由于自身具备构建多线程的能力,且体系结构比较中…

  • Java工程师要求_工程师到高级工程师要几年

    Java工程师要求_工程师到高级工程师要几年从事java后端开发4年及以上,具有根据业务需求进行独立设计的能力 熟练使用Spring及SpringMVC开发 熟练使用常用持久层框架Mybatis\Hibernate 熟悉java多线程及并发线程池使用 熟练使用Mysql基本操作,有一定sql优化经验 有使用Memcached/redis框架其中之一进行缓存开发的经验 会简单使用js/jquery等常用功能进行前端页面开发  、本科及以上学历…

  • 一般人到底要不要学Python_Python值得学吗

    一般人到底要不要学Python_Python值得学吗前言本人纯屌丝一枚,在学python之前对电脑的认知也就只限于上个网,玩个办公软件。这里不能跑题,我为啥说自学python,一般人我还是劝你算了吧。因为我就是那个一般人。基础真的很简单,是个人稍微认点真都能懂,这就是好多人说的python简单、易懂、好学,然后就是一顿浮夸的言论,误导那些小白,再然后那些小白也就跟着浮夸。这里我就给那些轻浮的人泼一桶冷水,懂跟学会是一码事吗?先来说哈python这个就业哈,我现在生活在祖国的肚皮上–成都,(嗯,有想了解川西迷你小环线的在下面留言哦),下面亲身经历,我喃,

  • 【我的OpenGL学习进阶之旅】什么是TGA文件以及如何打开TGA文件?「建议收藏」

    什么是TGA文件?具有TGA文件扩展名的文件是Truevision图形适配器图像文件。它也很流行是Targa图形文件,TruevisionTGA或只是TARGA,这意味着Truevision高级栅格图形适配器。您可能会发现普通图像查看器无法打开TGA苍蝇。“Targa图形”格式的图像可能以原始格式或压缩格式存储,这对于图标,线条图和其他简单图像可能是首选。TGA格式通常与视频游戏中使用的图像文件有关。TGA文件可以是未压缩的原始文件,也可以是无损的RLE压缩文件。这种压缩方式对于图标和线条

  • pycharm虚拟环境的解释器设置_pycharm虚拟环境

    pycharm虚拟环境的解释器设置_pycharm虚拟环境什么是Pycharm中的虚拟环境 假如想要在Pycharm中建立两个项目,并且这两个项目需要用到同一个第三方库的不同版本,如果这两个项目共享一个运行环境,那么此时就会发生版本冲突问题。为了解决这个问题,Pycharm提供了Virtualenv(即,虚拟环境)。Virtualenv可以创建一套独立运行的Python环境,从而做到不同项目之间的隔离。当需要安装该环境所需要的包时,在设置—项目—…

    2022年10月29日
  • 【js特效】图片循环滚动代码「建议收藏」

    【js特效】图片循环滚动代码「建议收藏」1.效果图如下:2.html代码:图片滚屏效果-www.miaov.com-妙味课堂 间隔停顿 短 中 长 滚动速度: 慢 中 快

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号