Linux下C/C++实现以十六进制的形式显示命令(xxd)

news2024/11/24 10:48:53

如果你需要在linux文本文件的十六进制转储?且正在寻找可以执行此操作的命令行实用程序,xxd的命令可以为你做这件事。xxd命令将文件显示为十六进制值和ASCII表示,并允许对其进行编辑。

xxd - 以十六进制形式表示

xxd程序接受文件或标准输入,并输出仅使用ASCII或EBCDIC字符的十六进制转储。这个输出十六进制转储可以安全地通过电子邮件发送并在目的地重建。它还可以采用格式相同的十六进制转储并将其转换回二进制格式,从而允许二进制文件作为文本进行编辑或修补。

语法:

以下是xxd命令的一般语法。请注意,如果参数包含在长选项名称(如-autoskip)中,则可以使用相应的短选项(如-a)指定相同的参数。
显示命令帮助或版本:

xxd -h[elp]

创建十六进制转储:

xxd [options] [infile [outfile]]

将十六进制转储转换为二进制:

xxd -r[evert] [options] [infile [outfile]]

选项如下:

如何使用xxd命令?

以下示例显示了可以使用xxd的一些方式。通过在命令提示符中键入man-xxd,请参阅xxd手册页以获取更多示例。

下面是如何使用xxd将文件内容转换为十六进制:

如何打印文件的前20个字节

上面的三个命令都读取test.txt的内容,获取前20个字节,并将其打印为十六进制转储。第一个命令指定十进制长度(20),第二个命令指定十六进制长度(0x14),第三个命令指定八进制长度(024)。

如何打印文件的最后20个字节

上面的三个命令都读取test.txt的内容,转到文件的末尾,向后搜索(-符号)20个字节,然后作为十六进制转储向前打印。第一个命令指定十进制长度(20),第二个命令指定十六进制长度(0x14),第三个命令指定八进制长度(024)。

如何将文件的前20个字节打印为位


上面的命令读取test.txt的内容,获取前20个字节,并将其打印为二进制转储.

如何将120个字节打印为连续十六进制转储,每行20个八位字节

如何编辑二进制文件

xxd手册页有一行编辑步骤。为了清晰起见,本示例分解了步骤。将文件转换为十六进制转储。

上面的命令读取test.txt的内容,将其转换为十六进制转储,并将其写入hexd_file.txt。

将十六进制转储转换回二进制

在这里插入图片描述

上面的命令读取hex_file.txt的内容,将其还原为二进制形式,并将其写入binary_file.txt。

如何创建文本文件

上面的命令打印通过管道发送到xxd命令的十六进制值。-r返回,-p表示纯十六进制,没有给出行信息。这将从打印重定向到屏幕,并保存为test_file.txt。如果不包含>test_file.txt,则将结果打印到stdout。

在这里插入图片描述

Linux下C/C++实现xxd命令

...
static void xxdline(FILE *fp, char *l, int nz)
{
	static char z[LLEN+1];
	static int zero_seen = 0;

	if (!nz && zero_seen == 1)
		strcpy(z, l);

	if (nz || !zero_seen++)
	{
		if (nz)
		{
		  if (nz < 0)
			zero_seen--;
		  if (zero_seen == 2)
			  if (fputs(z, fp) == EOF)
				 die(3);
		  if (zero_seen > 2)
			  if (fputs("*\n", fp) == EOF)
			     die(3);
		}
		if (nz >= 0 || zero_seen > 0)
			if (fputs(l, fp) == EOF)
				die(3);
			if (nz)
				zero_seen = 0;
	}
}
...
int main(int argc, char *argv[])
{

...

	pname = argv[0];
	for (pp = pname; *pp; )
		if (*pp++ == PATH_SEP)
			pname = pp;

	while (argc >= 2)
    {
		pp = argv[1] + (!STRNCMP(argv[1], "--", 2) && argv[1][2]);
		if (!STRNCMP(pp, "-a", 2)) autoskip = 1 - autoskip;
		else if (!STRNCMP(pp, "-b", 2)) hextype = HEX_BITS;
		else if (!STRNCMP(pp, "-e", 2)) hextype = HEX_LITTLEENDIAN;
		else if (!STRNCMP(pp, "-u", 2)) hexx = hexxa + 16;
		else if (!STRNCMP(pp, "-p", 2)) hextype = HEX_POSTSCRIPT;
		else if (!STRNCMP(pp, "-i", 2)) hextype = HEX_CINCLUDE;
		else if (!STRNCMP(pp, "-r", 2)) revert++;
		else if (!STRNCMP(pp, "-E", 2)) ebcdic++;
		else if (!STRNCMP(pp, "-v", 2))
		{
			fprintf(stderr, "%s%s\n", version, osver);
			exit(0);
		}
		else if (!STRNCMP(pp, "-c", 2))
		{
			if (pp[2] && STRNCMP("ols", pp + 2, 3))
				cols = (int)strtol(pp + 2, NULL, 0);
			else
			{
			  if (!argv[2])
			  exit_with_usage();
			  cols = (int)strtol(argv[2], NULL, 0);
			  argv++;
			  argc--;
			}
		}
		else if (!STRNCMP(pp, "-g", 2))
		{
			if (pp[2] && STRNCMP("group", pp + 2, 5))
				octspergrp = (int)strtol(pp + 2, NULL, 0);
			else
			{
			  if (!argv[2])
			  exit_with_usage();
			  octspergrp = (int)strtol(argv[2], NULL, 0);
			  argv++;
			  argc--;
			}
		}
		else if (!STRNCMP(pp, "-o", 2))
		{
			if (pp[2] && STRNCMP("ffset", pp + 2, 5))
				displayoff = (int)strtol(pp + 2, NULL, 0);
		else
		{
			if (!argv[2])
			  exit_with_usage();
			displayoff = (int)strtol(argv[2], NULL, 0);
			argv++;
			argc--;
		}
		}
		else if (!STRNCMP(pp, "-s", 2))
		{
			relseek = 0;
			negseek = 0;
			if (pp[2] && STRNCMP("kip", pp+2, 3) && STRNCMP("eek", pp+2, 3))
			{
				seekoff = strtol(pp + 2+relseek+negseek, (char **)NULL, 0);
			}
			else
			{
			  if (!argv[2])
				exit_with_usage();
			  seekoff = strtol(argv[2] + relseek+negseek, (char **)NULL, 0);
			  argv++;
			  argc--;
			}
		}
		else if (!STRNCMP(pp, "-l", 2))
		{
			if (pp[2] && STRNCMP("en", pp + 2, 2))
				length = strtol(pp + 2, (char **)NULL, 0);
			else
			{
			  if (!argv[2])
				 exit_with_usage();
			  length = strtol(argv[2], (char **)NULL, 0);
			  argv++;
			  argc--;
			}
		}
		else if (!strcmp(pp, "--"))	/* end of options */
		{
			argv++;
			argc--;
			break;
		}
		else if (pp[0] == '-' && pp[1])	/* unknown option */
			exit_with_usage();
		else
			break;				/* not an option */

		argv++;				/* advance to next argument */
		argc--;
    }

	if (!cols)
		switch (hextype)
		{
			case HEX_POSTSCRIPT:	cols = 30; break;
			case HEX_CINCLUDE:	cols = 12; break;
			case HEX_BITS:		cols = 6; break;
			case HEX_NORMAL:
			case HEX_LITTLEENDIAN:
			default:			cols = 16; break;
		}

	if (octspergrp < 0)
		switch (hextype)
		{
			case HEX_BITS:		octspergrp = 1; break;
			case HEX_NORMAL:		octspergrp = 2; break;
			case HEX_LITTLEENDIAN:	octspergrp = 4; break;
			case HEX_POSTSCRIPT:
			case HEX_CINCLUDE:
			default:			octspergrp = 0; break;
		}

	if (cols < 1 || ((hextype == HEX_NORMAL || hextype == HEX_BITS || hextype == HEX_LITTLEENDIAN)
								&& (cols > COLS)))
	{
		  fprintf(stderr, "%s: invalid number of columns (max. %d).\n", pname, COLS);
		  exit(1);
	}
...
	
}	


If you need the complete source code of xxd, add your WeChat number (c17865354792)

总结

xxd创建给定文件或标准输入的十六进制转储。它还可以将十六进制转储转换回其原始二进制形式,因此,如果处理十六进制和二进制文件内容,xxd命令非常有用。

Welcome to follow WeChat official account【程序猿编码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python--函数

目录函数1.1 自定义函数1.2 调用函数1.3 作用域函数 1.1 自定义函数 无参数、无返回值 def function():表达式无参数、有返回值 def function():表达式return 需返回的值tips&#xff1a;函数中可以有多个return语句&#xff0c;但是只要执行一个return语句&#xff0c;就意…

PPT+Visio复现顶刊三维流程图

复现 论文中的图3&#xff0c;改图是研究流程&#xff0c;主要讲了神经网络的流程。 A future land use simulation model (FLUS) for simulating multiple land use scenarios by coupling human and natural effects https://doi.org/10.1016/j.landurbplan.2017.09.019 1.…

【Touchstone 1.02.0数据格式解析】

Touchstone 1.0&2.0数据格式解析 在进行S参数仿真时&#xff0c;一般存储的S参数模型为SnP格式&#xff0c;如双端口模型为S2P格式&#xff0c;四端口模型为S4P格式。了解SnP格式的具体要求&#xff0c;对于S参数的应用具有重要作用。 本质上&#xff0c;S参数是由S参数矩…

对比Python,PySpark 大数据处理其实更香

对于数据分析师、数据科学家和任何使用数据的人来说&#xff0c;能够熟练而有效地处理大数据是一项非常有优势的技能。 如果你已经熟悉运用 Python 和 pandas 做常规数据处理&#xff0c;并且想学习处理大数据&#xff0c;那么熟悉 PySpark&#xff0c;并将用其做数据处理&…

免费搜题系统搭建

免费搜题系统搭建 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳…

C语言详细知识点复习(上)

文章目录一、C语言概述1、C语言的主要特点2、算法的概念及特点二、C程序设计的基础语法1、常量和变量2、数据类型3、运算符和表达式4、C 语句5、数据的输入和输出三、选择结构四、循环结构1、循环结构2、break\continue3、循环程序举例一、C语言概述 1、C语言的主要特点 程序…

微信小程序最新用户头像昵称获取规则调整应对措施(2022)

目录一、调整二、应对措施2.1 更新头像2.2 更新昵称三、完整代码一、调整 小程序用户头像昵称获取规则调整公告 以前通过wx.getUserProfile获取用户信息&#xff0c;用户点击同意以后&#xff0c;便可以直接获取相关信息&#xff0c;但是官方最近做出了调整&#xff0c;直接将…

图书管理系统

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录 文章目录 前言 一.界面设计 1.管理员菜单 2.用户菜单 3.用户操作&#xff1a; 查找图书借阅图书归还图书显示图书 4.管理员操作 查找图书新增图书删除图…

【Matlab】Matlab导入多个.mat文件并画图的过程详解

Matlab导入多个.mat文件并画图的过程详解0. 实验背景1. 导入.mat文件存储1.1 导入.mat文件及作图最简单的方式&#xff1a;1.2 导入.mat文件及作图的脚本代码2. plot画图总结2.1 画散点图2.1.1 点形状2.1.2 点大小2.1.3 点颜色2.1.4 点填充2.2 画折线图2.2.1 折线形状2.2.2 折线…

多路转接(IO复用)接口介绍

文章目录引言select函数声明参数以及类型介绍返回值select代码演示优缺点poll函数声明参数以及类型介绍返回值poll代码演示优缺点epollepoll三调用简述epoll实现原理epoll代码演示epoll工作方式对比LT和ET注意点引言 此文仅仅作为多路转接api的介绍和使用,而对于五种IO模型的介…

闲活章始:初创纪元

OK先说好&#xff0c;标题沙雕的原因是因为要求不少于5个字 不打算提炼语言了&#xff0c;浓缩表达是个费事活。既然文章归为闲活&#xff0c;其中也来些闲话较好。主要给自己看&#xff0c;能帮助他人更妙。 待闲活干好之日&#xff0c;就是文章收费之时。 做什么 做…

(JVM)运行时数据区的总结以及常见大厂面试题

运行时数据区的总结以及常见大厂面试题 线程私有的&#xff1a;程序计数器、本地方法栈、虚拟机栈 虚拟机栈里的栈帧的结构&#xff1a;返回值、局部变量表、操作数栈、动态链接&#xff08;装着指向运行时常量池的当前方法的引用&#xff0c;知道当前方法是引用运行时常量池中…

中国制造2025-智能制造是强国必由之路

《中国制造2025》十大重点领域 新一代信息技术产业&#xff1a;集成电路及专用设备、信息通信设备、操作系统与工业软件、智能制造核心技术信息设备 高档数控机床和机器人&#xff1a;高档数控机床与基础制造装备、机器人 航空航天装备:飞机、航空发动机、航空机载设备与系统…

软件测试---前言篇

一 : 主要内容 二 : 什么是软件测试 在规定的条件下对程序进行操作&#xff0c;以发现程序错误&#xff0c;衡量软件质量&#xff0c;并对其是否能满足设计要求进行评估的过程.上面这是官话 . 在我们日常生活中 , 就有许多测试的行为 , 比如地铁站的金属检测仪 , 用于检测旅客…

【SpringBoot笔记26】SpringBoot框架集成ElasticSearch数据库

这篇文章&#xff0c;主要介绍SpringBoot框架如何集成ElasticSearch数据库。 目录 一、SpringBoot集成ES 1.1、ElasticSearch介绍 1.2、引入ES依赖 1.3、实例化ES对象 1.4、创建测试控制器 一、SpringBoot集成ES 1.1、ElasticSearch介绍 ElasticSearch是一款分布式&…

[附源码]java毕业设计网上购物商城系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Allegro只给孔或pin加背钻属性操作指导

Allegro只给孔或pin加背钻属性操作指导 Allegro支持只给孔加背钻属性,除了孔,pin也是可以的,具体操作步骤如下 选择Edit-Property命令 Find选择Net 选择需要背钻的网络添加背钻属性,点击OK 设置下背钻参数 选择背钻种类,top钻选择top,bottom钻选择bottom 把需要背钻…

科研笔记—Ergodic Rate Analysis of STAR-RIS Aided NOMA Systems

Ergodic Rate Analysis of STAR-RIS Aided NOMA Systems 1 STAR-RIS2 摘要3 系统模型3.1 信道3.2 用户位置3.3 ES&#xff08;Energy Splitting&#xff09;能量分裂协议3.4 NOMA3.5 信道模型3.6 信干噪比4 仿真4.1 遍历率分析星型智能反射面辅助NOMA系统的遍历率分析 原文链接…

Day08--初步创建并使用自定义组件

提纲挈领&#xff1a; 1.如何创建自定义组件&#xff1f; 我的操作&#xff1a; ************************************************* ************************************************* ************************************************* *****************************…

Netty:入门(2)

相关文章&#xff1a; 《IO 模型与多路复用》 《Java NIO》 《Netty&#xff1a;入门&#xff08;1&#xff09;》 写在开头&#xff1a;本文为学习后的总结&#xff0c;可能有不到位的地方&#xff0c;错误的地方&#xff0c;欢迎各位指正。 前言 在前文中&#xff0c;我们…