我的linux系统上有这个二进制文件..
udit@udit-Dabba ~ $ cat file.enc
Salted__s?bO??<0?F???Jw!???]?:`C?LK??l
Run Code Online (Sandbox Code Playgroud)
使用hexdump命令我看到这样的信息..
udit@udit-Dabba ~ $ hexdump -C file.enc
00000000 53 61 6c 74 65 64 5f 5f 1b 73 a1 62 4f 15 be f6 |Salted__.s.bO...|
00000010 3c 30 cc 46 ee 10 13 11 84 bf 4a 77 21 a4 84 99 |<0.F......Jw!...|
00000020 0e 5d ef 11 18 3a 60 43 a0 4c 4b 1e c8 86 e6 6c |.]...:`C.LK....l|
00000030
Run Code Online (Sandbox Code Playgroud)
现在我给了一个其他系统的文件,其内容是这样的..
53 61 6c 74 65 64 5f 5f 1b 73 …
Run Code Online (Sandbox Code Playgroud) 感觉有点愚蠢问这个(听起来像基本)但在其他地方找不到答案.我想将二进制数据转换为十六进制,只是,没有花哨的格式和所有.hexdump
看起来太聪明了,它对我来说"过度格式化".我想从/ dev/random中取x个字节并将其作为十六进制传递.
我最好只使用标准的linux工具,所以我不需要在每台机器上安装它(有很多)
我正在调查一个主要是UTF-8文件,其中有很多长行.但是,文件并不完全是文本文件,还有一些垃圾.为了找到我的兴趣点,我正在使用hd
和grep
.
所以在某些时候我知道它对例如0000301a感兴趣,所以我想在Vim中快速打开文件并跳转到那个位置.
示例(实际上是一个很小的文件,这里的位置是0000001c):
me@here:~$ hd file | grep -C 10 \ 00\
00000000 6c 69 6e 65 31 0a 6c 69 6e 65 32 0a 6c 69 6e 65 |line1.line2.line|
00000010 33 0a 6c 69 6e 65 34 0a 6c 69 6e 65 00 35 0a 6c |3.line4.line.5.l|
00000020 69 6e 65 36 0a 6c 69 6e 65 37 0a 6c 69 6e 65 38 |ine6.line7.line8|
00000030 0a 6c 69 6e 65 39 0a 6c 69 …
Run Code Online (Sandbox Code Playgroud) 我正在使用unix hexdump实用程序.我的输入文件是UTF-8编码的,包含一个单字符ñ
,它是C3 B1
十六进制的UTF-8.
hexdump test.txt
0000000 b1c3
0000002
Run Code Online (Sandbox Code Playgroud)
咦?这表明B1 C3
- 与我的预期相反!谁能解释一下?
为了获得预期的输出,我做了:
hexdump -C test.txt
00000000 c3 b1 |..|
00000002
Run Code Online (Sandbox Code Playgroud)
我以为我理解编码系统..
....
finalize(char *hdrs, sendip_data *headers[], int index,
sendip_data *data, sendip_data *pack)
{
........
Run Code Online (Sandbox Code Playgroud)
出于调试目的,我想要一个data
和pack
类型的十六进制转储,它们是sendip_data
一种非常复杂的结构.实际上它们包含一些二进制信息,所以我不确定我的项目的输出是否正确.因此,出于调试目的,我想将数据写入文件,以便我可以使用hexdump,如下所示 -
$hexdump -C file.txt
Run Code Online (Sandbox Code Playgroud)
另外因为这是一个/ w数据包的运行时生成所以我也不确定我认为需要的长度data
和pack
结构fread / fwrite
.所以请给我一些建议.
我正在尝试输出与某些二进制数据相对应的ASCII值.我已成功应用该hexdump
实用程序并排输出hexdump和ASCII,如下所示:
00000120 20 20 20 20 3d 20 30 78 30 30 30 30 30 30 33 30 | = 0x00000030|
00000130 0a 01 00 00 00 23 00 00 00 75 75 69 64 30 20 20 |.....#...uuid0 |
00000140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3d | =|
00000150 20 30 78 39 30 38 32 61 63 35 61 0a 01 00 00 00 | 0x9082ac5a.....| …
Run Code Online (Sandbox Code Playgroud) 我试图只打印hex values
from hexdump
,即不打印行号和ASCII表.
但是以下命令行不会打印任何内容:
hexdump -n 50 -Cs 10 file.bin | awk '{for(i=NF-17; i>2; --i) print $i}'
Run Code Online (Sandbox Code Playgroud) 我使用网络和串行通信软件工作很多,因此我经常需要使用代码来显示或记录数据包的十六进制转储.
每次我这样做,我都会从头开始编写另一个hex-dump例程.我将要再次这样做,但我想在这里问:那里有什么好的C++自由十六进制转储代码吗?
我想要的功能:
编辑: 澄清:我正在寻找可以轻松插入我自己的程序的代码,以写入stderr,stdout,日志文件或其他此类输出流.我不是在寻找命令行十六进制转储实用程序.
如何在bash中创建具有后续二进制值的二进制文件?
喜欢:
$ hexdump testfile
0000000 0100 0302 0504 0706 0908 0b0a 0d0c 0f0e
0000010 1110 1312 1514 1716 1918 1b1a 1d1c 1f1e
0000020 2120 2322 2524 2726 2928 2b2a 2d2c 2f2e
0000030 ....
Run Code Online (Sandbox Code Playgroud)
在C中,我做:
fd = open("testfile", O_RDWR | O_CREAT);
for (i=0; i< CONTENT_SIZE; i++)
{
testBufOut[i] = i;
}
num_bytes_written = write(fd, testBufOut, CONTENT_SIZE);
close (fd);
Run Code Online (Sandbox Code Playgroud)
这就是我想要的:
#! /bin/bash
i=0
while [ $i -lt 256 ]; do
h=$(printf "%.2X\n" $i)
echo "$h"| xxd -r -p
i=$((i-1))
done
Run Code Online (Sandbox Code Playgroud) 如何在Elixir中将二进制字符串转换为十六进制字符串,反之亦然?
对于其他"主流"语言,关于此主题,有一些关于SO的帖子.甚至还有一篇SO帖子对各种C#实现进行了基准测试
我们如何在长生不老药中做到这一点?
我的实施太难看了,不能分享...... :(