问题标签 [xxd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
9033 浏览

shell - 如何在 shell 中从二进制文件中打印浮点值?

我有包含双浮点(8 字节)或浮点(4 字节)值的二进制文件,它是通过以下方式生成的:

我可以通过以下方式从 Python 打印回来:

4字节浮点数也一样,只是<d改成(后面会<f提到)。float.bin

如何使用更简洁的方式(不使用 Python)从 shell 脚本中打印该值?使用内置工具(例如printf)或广泛使用的外部工具(例如xxddcbcodhexdump等)。


例如要打印十进制值,我可以使用xxd(Vim 的一部分),例如在 Bash 中:

  • 获取第一个字节的值:

    对于第二个和第四个字节,增加-s.

  • 从所有 8 个字节中获取十进制值:

    /li>

但是我想0.123在 Unix 系列系统上打印原始浮点值 ()。理想情况下使用一些单行(作为脚本的一部分保持简单),所以我可以将它分配给文本变量或在屏幕上打印值。


我尝试使用printf(在 4 字节浮点数上使其更简单),但它没有按预期工作:

其中根据此在线转换器0x3dfbe76d与 相同0.123,因此十六进制值是相反的(xxd实际给出的值)。

0 投票
1 回答
1309 浏览

linux - 在 Linux 上的多个图像中搜索特定的给定十六进制字符串

我正在对图像处理进行一些研究,我想知道是否可以在各种图像中搜索特定的十六进制字符串/字节数组。如果它能给我一个包含该特定字符串的图像列表,那就太好了。基本上 grep -r "" 的作用。出于某种原因 grep 不做这项工作。我对字符串不熟悉。我确实看过“man strings”,但没有多大帮助。无论如何,我想在同一个文件夹中的几个图像中寻找一个特定的十六进制字符串“0002131230443”(甚至是特定的字节数组,即base64字符串)。任何帮助将不胜感激。

我发现这段代码使用 xxd 和 grep 完全符合我的要求。请在下面找到命令:xxd -p /your/file | tr -d '\n' | grep -c '22081b00081f091d2733170d123f3114'

仅供参考:如果内容匹配,它将返回 1,否则返回 0。

xxd -p 将文件转换为普通的十六进制转储, tr -d '\n' 删除 xxd 添加的换行符, grep -c 计算匹配的行数。

有谁知道如何使用 bash 脚本在特定目录中运行上面的代码。我有大约 400 张图像,如果所有 400 张图像都具有该特定字符串,我希望它只返回 400 个(即字符串匹配计数)。我在下面找到了这个脚本代码,但它一遍又一遍地运行相同的代码 400 次,每次返回 0 或 1:

多谢你们。

等离子33

0 投票
1 回答
1594 浏览

linux - 使用 xxd 将整数转换为二进制

我有一个文件 output.log,它有一个空格列表“”,分隔的整数范围为 [-2048,2048]。我正在尝试使用 xxd 将其转换为二进制文件。我正在使用命令,

但是,当我用 xxd 读回文件时,我丢失了所有符号 (-) 并收到一些大于 2048 的值。有没有更好的方法来做到这一点?谢谢。

编辑:使用示例数据...

也许我误解了 xxd 在做什么,我期望在最后一个命令之后看到的是看到我的原始输入数据被显示回来。这不正确吗?

对于更大的数据集,我会不时看到正确的值出现,但输出中仍然存在大量噪声。

0 投票
1 回答
299 浏览

ubuntu-14.04 - 无法从 Imatic 板接收十六进制响应

再会,

这会很长。我正在尝试与“SainSmart iMatic with RJ45”板进行通信,该板与“SainSmart 16 通道 12V 继电器模块”一起使用。

基本上,我能够成功地向开发板发送十六进制命令,但在需要时无法收到来自开发板的响应。我这是什么意思?

我有一台带有 Ubuntu 14.04.4 LTS 的笔记本电脑,通过以太网直通电缆直接连接到主板(不再需要交叉类型)。我有这种网络的配置(只有两个设备)。imatic板的IP是固定的,192.168.1.4,端口3000。我的笔记本IP固定IP是192.168.1.2,子网掩码255.255.255.0,没有网关。

我在笔记本电脑中使用 netcat(在 TCP 协议模式下)在终端中以这种格式向板发送命令: echo '580112000000016C' | xxd -r -p | nc 192.168.1.4 3000 我怎么知道它有效?好吧,基本上来自辅助板的继电器已成功打开(“SainSmart 16-Channel 12V Relay Module”)。

有一个十六进制命令列表可以打开和关闭每个继电器。在前面的说明中,我告诉电路板打开 1 号继电器,让其他 15 个关闭。字符串'580112000000016C'用xxd从十六进制转换成二进制,然后发送到netcat。这部分有效。

唯一不起作用的指令是: echo '580113000000006C' | xxd -r -p | nc 192.168.1.4 3000 该指令只询问板子当前哪些继电器处于关闭或打开状态,期望得到以下格式的响应:28 01 00 00 00 XX XX HH(XX XX 16 位,每个位代表一个继电器状态,“ 1" 表示开启,"0" 表示关闭;HH 是之前所有数据的总和,表示它用作校验和)

我已经测试并证明,这不是董事会的问题。我用visual basic编写了一个代码,windows能够接收到板子的响应,但是我的ubuntu配置一定有问题。我已经禁用了我的防火墙,ufw。这不是以太网电缆的问题。我已经尝试过其他命令表示,例如: echo -n '5801100000000069' | xxd -r -p | 数控-v-n-w3 192.168.1.4 3000 | xxd 我已经使用 netcat 扫描了板上所有可用的端口,并且只有 3000 端口显示为可用,如制造商所述。虽然这似乎是一个网络配置问题,但在 Windows 中,我指定了与 ubuntu 中相同的 IP 和网络掩码。

我在这里想念什么?

0 投票
1 回答
2892 浏览

linux - objdump 和 xxd 的区别

我试图在二进制文件中找到一个调用函数,所以我尝试了这个:

  1. 编译我的代码(在 C 中),
  2. 使用命令:mips-mti-linux-gnu-objdump -d myapp.elf> objdump.txt
  3. 我在 objdump.txt 文件中的函数:9d003350: 42000828 myfunction 0x1

现在,我想在从内存中读取这个函数时在 myapp.bin 中识别这个函数。但是,我明白了:28080042

我尝试使用命令:xxd -ps myapp.bin> xxd.txt Just can find: 28080042

有可能这样做吗?

0 投票
2 回答
6408 浏览

html - 乐鑫 ESP32 网络服务器 HTML 示例

我正在使用 esp-idf 示例中包含的 Web 服务器示例之一进行嵌入式 ESP32 设计。我能够让设备进入软 AP 模式并显示一个简单的网页。现在我已经开始工作了,我正在尝试构建一个带有图形的页面。

我正在使用 Linux 十六进制工具“xxd -i”将 HTML 文件转换为 C 包含文件的十六进制转储数组。如果文档只是 HTML,它可以正常工作,但我坚持尝试使用图像执行此操作。

我在 HTML 文件和图像文件上都使用了 xxd,并使用“netconn_write”来写出这两个文件。我还尝试将它们组合成一个十六进制转储文件。在这一点上,我不确定如何继续,非常感谢任何帮助。

0 投票
1 回答
155 浏览

fortran - 未格式化文件记录标记的最后四个字节是什么?

以下是未格式化的 Fortran 文件(由AERMOD编译生成gfortran)的十六进制转储的摘录:

每条记录都以 开头0x0000da50,以 结尾0xda503f##(或者0xda500000当它是一个全零的记录时)。我了解编译器在每条记录的开头和结尾插入四个字节以指示其长度。

我从文档中知道所有记录的长度都是恒定的,并且每条记录的前 16 个字节包含常规信息,例如计数器和标签,但不包含任何计算数据。

现在,如果你取两个连续“记录行开始”的位置之间的差值,你会得到 55896(例如0xf4c8a8- 0xf3ee50= 55896),然后减去编译器添加的 8 个字节,你会得到 55888,或0xda50. 所以只有两个字节给出了实际的记录长度。

每条记录的最后四个字节在做什么?

更新

我发现杂散字节仅在xxd. 这是一个较小文件(使用相同的 Fortran 程序生成)的完整十六进制转储,具有两个不同的列规范(首先是 16 个八位字节,然后是 25 个八位字节)。也许这是一个问题xxd

第二:

在 16 字节的前导码(以 结尾202020)之后,输出应该是 72 个数字的序列。由于它们占用 576 个字节,我猜它们是 Fortran 中的双精度实数:

0 投票
3 回答
2189 浏览

bash - 如何用xxd逐行制作hexdump?

使用 cat 创建示例文件。

检查示例文件中的内容。

用 xxd 做一个 hexdump。

如何使用 xxd 逐行制作 hexdump,如下所示:

0 投票
2 回答
4222 浏览

linux - 使用标准输入将一些十六进制字符串放入 xxd 不会产生任何输出

我在从标准输入通过 xxd 收集数据时遇到问题。这是命令:

当我在 shell 中执行这个命令时,它会等待输入。我试图输入'0006303030304e430006303030304e43'然后按回车,但看起来xxd没有得到我的输入或没有通过管道输出到dd。

例如,这完美地工作:

我想要实现的目标:我想放一些十六进制字符串,将其转换为二进制,然后以 16 位块的形式保存到文件中。脚本必须不断地在标准输入上监听。

xxd 是这样工作的吗?我试图将 \n 或 \r\n 放在十六进制字符串的末尾,但 xxd 输出上仍然没有任何内容。

谢谢你的帮助。

此致!

0 投票
1 回答
675 浏览

linux - 使用 Bash 进行文件雕刻无法使用 grep 找到十六进制值 FFD8 或 FFD9

我希望有人可以帮助我解决我的文件雕刻脚本。我想在原始格式(.dd)的图像文件中以十六进制值的形式查找文件头和对应的页脚。

对于其他页眉和页脚,我的脚本运行良好,但不适用于 JPG 文件的页眉和页脚:FFD8 和 FFD9 以下是我目前的处理方式:

grep -obUaP "\xFF\xD8" image_file.dd

我想取回搜索到的字符串页眉和页脚位置的偏移量,以便稍后用 dd 提取它们。我使用 grep 将图像文件作为二进制文件处理。

例如,当我通过此搜索使用我的模式在图像中查找JFIF时,我发现了很多匹配项:

grep -obaUP "\x4A\x46\x49\x46" image_file.dd

但FFD8没有!

那么有没有人能给我一个提示,为什么我找不到这些简单的十六进制值?