标签: hexdump

如何将二进制文件转储为 C/C++ 字符串文字?

我有一个二进制文件,我想包含在我的 C 源代码中(暂时用于测试目的),所以我想以 C 字符串的形式获取文件内容,如下所示:

\x01\x02\x03\x04
Run Code Online (Sandbox Code Playgroud)

这可能吗,也许是通过使用odhexdump实用程序?虽然不是必需的,但如果字符串可以每 16 个输入字节换行到下一行,并在每行的开头和结尾包含双引号,那就更好了!

我知道字符串将嵌入空值 ( \x00),因此我需要在代码中指定字符串的长度,以防止这些字节提前终止字符串。

c hexdump xxd

44
推荐指数
3
解决办法
4万
查看次数

是否有支持 unicode 的 sed 替代方案?

例如:

sed 's/\u0091//g' file1
Run Code Online (Sandbox Code Playgroud)

现在,我必须做得到hexdump十六进制数并输入sed如下:

$ echo -ne '\u9991' | hexdump -C
00000000  e9 a6 91                                          |...|
00000003
Run Code Online (Sandbox Code Playgroud)

进而:

$ sed 's/\xe9\xa6\x91//g' file1
Run Code Online (Sandbox Code Playgroud)

sed unicode hexdump

40
推荐指数
5
解决办法
2万
查看次数

hexdump 是否尊重其系统的字节序?

在我的机器上,当我运行这些命令时,我得到以下输出:

$ echo foos > myfile
$ hexdump myfile
6f66 736f 000a
Run Code Online (Sandbox Code Playgroud)

hexdump 的输出是小端的。这是否意味着我的机器是小端格式,还是 hexdump 总是使用小端格式?

bsd utilities hexdump

34
推荐指数
2
解决办法
3万
查看次数

如何解释二进制文件的八进制或十六进制转储?

二进制文件有字符串和一些数字,如果我这样做 od -c filenamestrings filename,我可以正确地看到字符串。但是,数字呢?它们采用某种奇怪的格式。

做完后的文字od -c filename是这样的:

0000000 036 \0 032 004 SD \0 \0 \0 \0 seq 1
0000020 \0 \0 \0 \0 \0 \0 \0 \0 \t \0 ó 002 3 001
0000040 & \0 032 \f O 2 006 \0 \0 \0 osfus 1
0000060 ó 002 3 001 ÿ \r \0 \0 \t \0 \0 @ 3 ×
0000100 233 º 004 \0 é 003 \0 \0 & \0 032 …

od binary hexdump

14
推荐指数
2
解决办法
3万
查看次数

从二进制转换为十六进制并返回

给定一个二进制文件,如何在安装了的最小系统上仅使用sedcut等标准工具将其转换为十六进制字符串并返回busybox

这些工具不可用:

  • perl
  • python
  • xxd (带有vim)
  • gcc

hexdump命令随附busybox,但与随附的命令不同util-linux

我正在寻找将文件转换为十六进制字符串的脚本或命令,以及将其转换回二进制的相应脚本或命令。中间格式不必是十六进制,它可以是 base64 或其他格式。

这适用于磁盘空间有限的嵌入式设备。

embedded busybox hexdump

10
推荐指数
1
解决办法
2万
查看次数

如何让 hexdump 不等待来自标准输入的 16 个字符来显示它们的十六进制值?

如果我hexdump在终端中没有任何参数地打开:

hexdump
Run Code Online (Sandbox Code Playgroud)

当我在终端中输入内容并按 时Enterhexdump将显示我输入的任何字符的十六进制值。

hexdump如果我输入 16 个字符,则只会显示十六进制值,例如:

在此处输入图片说明

在这里,我输入了a15 次字符并按下Enter(因此hexdump收到了 16 个字符 (15 a+ \n))。

但是如果我输入的字符少于 16 个,例如:

在此处输入图片说明

在这里,我输入了a14 次字符并按下Enter(因此hexdump收到了 15 个字符 (14 a+ \n))。而在这种情况下hexdump没有显示任何东西。

我可以hexdump显示接收到的任何字符长度的十六进制值,而不是等待接收 16 个字符吗?

注意:我不想“使用 hexdump 和 xxd 的选项以每行十六进制显示一个字节”(如此处的评论中所建议)。我想要做的基本上是例如知道 A 的十六进制值是什么,而不必输入额外的 15 个字符来获取它。

linux terminal hexdump

9
推荐指数
1
解决办法
2662
查看次数

od、hd、hexdump 和 xxd 命令之间有什么区别?

od、hd、hexdump 和 xxd 命令之间有什么区别?

它们都是转储文件的命令,并且都可以以各种格式转储文件,例如十六进制、八进制或二进制。为什么要创建不同的程序?

od dump hexdump xxd

9
推荐指数
1
解决办法
1万
查看次数

为什么 ls 和 hexdump 不同意我的文件大小?

我有一个我创建的文件(在 vim 中),用于测试目的(在 SSH 客户端中测试 UTF-8 输出)。然而,这个文件正在发生奇怪的事情。

我想知道文件中有哪些字节,所以我使用了hexdump

username@computername:~$ hexdump -x intl.txt
0000000    9ecf    000a
0000003
Run Code Online (Sandbox Code Playgroud)

好的,那里有四个字节,00 和 0a 是如何进入的,我不清楚,但无论如何。不过,这就是它变得奇怪的地方:

username@computername:~$ ls -al intl.txt
-rw-rw-r-- 1 username username 3 Mar 26 15:14 intl.txt
Run Code Online (Sandbox Code Playgroud)

等等,是三个字节?这里发生了什么?

好像这还不够奇怪,hexdump -C给出了非常不同的输出:

username@computername:~$ hexdump -C intl.txt
00000000  cf 9e 0a                                          |...|
00000003
Run Code Online (Sandbox Code Playgroud)

Vim 也对这个文件有点困惑。当我启动它时,它在状态行中给出:

"intl.txt" 1L, 3C
Run Code Online (Sandbox Code Playgroud)

然而,最重要的是,我得到了这个(使用set list):

?$
~
~
~
~
Run Code Online (Sandbox Code Playgroud)

所以,它认为有 3 个字符,但只打印一个。我可以理解它是否打印了 koppa 和它下面的空白行...

ls filesystems hexdump

7
推荐指数
1
解决办法
1838
查看次数

在命令行上实现类似 hexdump 的格式,包括二进制字符串?

我真的很喜欢hexdump,尤其是因为您可以定义自定义格式;说:

$ echo -e '\x00\x01\x02\x03' | hexdump -v -e '1/1 "%_ad: "' -e '4/1 "%02X "' -e '1/1 " : "' -e '4/1 "%_p"' -e '1/1 "\n"'
0: 00 01 02 03 : ....
4: 0A          : .
Run Code Online (Sandbox Code Playgroud)

所以,我可以选择每行 4 个字节,先写成十六进制,然后写成字符。但是,我在这里缺少的是“二进制字符串”(或“位字符串”)格式字符;例如,我想-e '4/1 "%08b "'在该命令行中的某处写一些类似的东西,然后得到,例如:

0: 00 01 02 03 : 00000000 00000001 00000010 00000011 : ....
4: 0A          : 00001010 : .
Run Code Online (Sandbox Code Playgroud)

当然,那么可能必须指定字节序(如果应该格式化多于一个字节的组)等等......但无论如何,就我在hexdump手册中看到的而言,这种格式不存在.

所以我的问题是 - 我在 Linux 命令行上有哪些替代方案,以便我可以获得包含上述二进制字符串的格式化转储,但最大程度地保留了hexdump程序的可定制性(在字节分组方面) ) 什么时候使用它的-e选项?

linux command-line hexdump

7
推荐指数
1
解决办法
3435
查看次数

从新行开始的字符串的十六进制转储?

假设我有一个多行字符串,但上面的条目很短;如果我尝试 hexdump,那么我会得到这样的信息:

echo "something
is
being
written
here" | hexdump -C

#00000000  73 6f 6d 65 74 68 69 6e  67 0a 69 73 0a 62 65 69  |something.is.bei|
#00000010  6e 67 0a 77 72 69 74 74  65 6e 0a 68 65 72 65 0a  |ng.written.here.|
#00000020
Run Code Online (Sandbox Code Playgroud)

大多数十六进制转储程序,包括hexdump简单地用作 2D 矩阵(您可以定义每行将有多少字节/列);所以在这种情况下,整个输出被压缩在两行转储上。

有没有我可以使用的程序,它会像往常一样继续运行 - 除非遇到新行(0x0a- 但可能是任何其他字符,或其序列),它也会开始一个新行?在这种情况下,我想像这样的输出:

00000000  73 6f 6d 65 74 68 69 6e  67 0a                    |something.|
0000000a  69 73 0a                                          |is.|
0000000d  62 65 69 …
Run Code Online (Sandbox Code Playgroud)

hexdump hex text-formatting

7
推荐指数
1
解决办法
5656
查看次数

标签 统计

hexdump ×10

linux ×2

od ×2

xxd ×2

binary ×1

bsd ×1

busybox ×1

c ×1

command-line ×1

dump ×1

embedded ×1

filesystems ×1

hex ×1

ls ×1

sed ×1

terminal ×1

text-formatting ×1

unicode ×1

utilities ×1