我有一个二进制文件,我想包含在我的 C 源代码中(暂时用于测试目的),所以我想以 C 字符串的形式获取文件内容,如下所示:
\x01\x02\x03\x04
Run Code Online (Sandbox Code Playgroud)
这可能吗,也许是通过使用od
或hexdump
实用程序?虽然不是必需的,但如果字符串可以每 16 个输入字节换行到下一行,并在每行的开头和结尾包含双引号,那就更好了!
我知道字符串将嵌入空值 ( \x00
),因此我需要在代码中指定字符串的长度,以防止这些字节提前终止字符串。
我可以告诉xxd
不要在其输出中打印任何换行符并将我的转储作为一条连续行吗?
[user@localhost] : ~ $ echo -n "this is a long line and xxd is going to take multiple lines to print it" | xxd -p
746869732069732061206c6f6e67206c696e6520616e6420787864206973
20676f696e6720746f2074616b65206d756c7469706c65206c696e657320
746f207072696e74206974
Run Code Online (Sandbox Code Playgroud) od、hd、hexdump 和 xxd 命令之间有什么区别?
它们都是转储文件的命令,并且都可以以各种格式转储文件,例如十六进制、八进制或二进制。为什么要创建不同的程序?
我使用的是 Mac。在 Bash 中,我尝试解码 Base64 字符串,然后尝试打印十六进制值。我正在使用base64 -d
命令,然后将其分配给变量。
myText='YYN29+2wV2XRAHymIyhgytWuqY4atgHnIUFfXA7FPOA='
myTextBytes=$(echo -n "$myText" | base64 --decode)
echo -n $myTextBytes | xxd -p -c 99999
Run Code Online (Sandbox Code Playgroud)
上述脚本的输出是:
618376f7edb05765d17ca6232860cad5aea98e1ab601e721415f5c0ec53ce0
但是,如果我直接运行以下命令:
echo -n "$myText" | base64 --decode | xxd -p -c 100000
Run Code Online (Sandbox Code Playgroud)
我得到:
618376f7edb05765d1 00 7ca6232860cad5aea98e1ab601e721415f5c0ec53ce0
我什至尝试使用openssl enc -base64
并得到相同的结果。也就是说,00
在分配给变量时被删除。00
当我将它分配给变量时如何保留它?
我不知道是否有什么办法让telnet来只发送\n
,而不是一个\r\n
。
例如,如果一个进程正在侦听这样的端口,则打印接收到的任何流量的字节:
nc -l 1234 | xxd -c 1
Run Code Online (Sandbox Code Playgroud)
从 netcat 连接到它nc localhost 1234
,然后输入“hi[enter]”:
0000000: 68 h
0000001: 69 i
0000002: 0a .
Run Code Online (Sandbox Code Playgroud)
从 telnet 连接到它telnet localhost 1234
,然后输入“hi[enter]”
0000000: 68 h
0000001: 69 i
0000002: 0d .
0000003: 0a .
Run Code Online (Sandbox Code Playgroud)
Telnet 为换行符发送 0x0d0a 而不是 0x0a。我知道这是一个 CRLF,而不是 LF。如果我使用^M
或 ,它也会发送 CRLF ^J
。
我以为我找到了一个直接解决这个问题的解决方案,通过使用toggle crlf
,但即使设置了这个选项,Telnet 总是发送\r\n
. 我也在各种 telnet 客户端上尝试过这个,所以我猜我误解了切换应该做什么。
有什么方法可以\n
通过 telnet发送,输入或其他方式?
长话短说:如何在终端中打印构成文件的二进制数字,例如库.so或简单的文本.txt文件
PC 硬件处理电信号(基本上它是一种开/关行为),它由二进制系统(数字 0 和 1)很好地逻辑转换。可视化文件的内容将是一个有趣的教育练习,以及比较 .txt 和打印相同文本的可执行文件。
我正在寻找一个命令来.png
使用显示三个文件xxd
,分别显示十六进制的前两行和最后两行。
我使用下面的命令一次显示一个文件,但我想知道是否有一个命令可以同时显示所有三个文件。到目前为止,这是我的命令:
de@Classbox:/mnt/mountpoint/pics$ xxd albert-grumpy-cat.png |head -n2 && tail -n2
Run Code Online (Sandbox Code Playgroud) 我对 unix 相当陌生,并且无法理解某些命令的作用。例如,当我xxd
在 ppm 文件(即xxd image.ppm
)上使用时,我得到如下输出:
00000000: 5036 0a31 3131 2031 3332 0a32 3535 0a55 P6.111 132.255.U
00000010: 6137 5966 3958 6939 566a 3953 6739 5464 a7Yf9Xi9Vj9Sg9Td
00000020: 3b57 643a 5763 3654 6335 5161 334e 5c30 ;Wd:Wc6Tc5Qa3N\0
00000030: 4f5a 3250 5d35 5361 3556 6334 5561 3352 OZ2P]5Sa5Vc4Ua3R
00000040: 5e32 515d 3256 6035 5b64 3856 6136 4a55 ^2Q]2V`5[d8Va6JU
...
...
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释这个输出代表什么吗?