C++ 是否有一个好的Unix命令用于转储二进制文件的文本表示?
我有一些包含整数的二进制文件。是否有一些很好的Unix命令,允许我将其转储到终端,而不需要偏移量信息,等等 比如:C++ 是否有一个好的Unix命令用于转储二进制文件的文本表示?,c++,c,unix,text,binary,C++,C,Unix,Text,Binary,我有一些包含整数的二进制文件。是否有一些很好的Unix命令,允许我将其转储到终端,而不需要偏移量信息,等等 比如: double int[4]; while (fread(tmp, sizeof(int), 4, stdin)) for(int i = 0; i < 4; i++) printf("%d\t",tmp[i]); double int[4]; 而(fread(tmp、sizeof(int)、4、stdin)) 对于(int i=0;i
double int[4];
while (fread(tmp, sizeof(int), 4, stdin))
for(int i = 0; i < 4; i++)
printf("%d\t",tmp[i]);
double int[4];
而(fread(tmp、sizeof(int)、4、stdin))
对于(int i=0;i<4;i++)
printf(“%d\t”,tmp[i]);
它似乎提供了我想要的信息,但输出太冗长了。我只想要内容。看起来像是您要找的:
$ strings file
它将输出二进制文件中包含的所有字符串。对于一个大文件来说,它仍然有点冗长,但它至少是可读的。要使用标准Unix工具解决此类问题,通常需要将一组文件组合在一起:
od -v -t d4 ~/.profile | awk '{$1 = ""; print}' | fmt -1 | sed 's/^ *//'
od
以十进制打印每个32位字,并带有前面的偏移量。awk
注释删除偏移量。fmt
命令强制每行一个整数。sed
命令会从结果中去掉前导空格。不会od-文件名会提供不带偏移量的数据?请尝试以下hextump(1)
咒语:
hextump-v-e'4/4“%d\t”文件
-v
强制打印整个文件(对于重复行,无*
)-e
采用格式字符串'4/4“%d\t”
,该字符串告诉hextump(1)
迭代四次,每次迭代使用给定的printf
-like掩码打印四个字节。您可以使用Perl几乎完全复制所需的输入和输出。实际上,没有任何文件读写不能完成,这比C语言更容易
“sysread”函数最类似于C的fread
您可以指定文件句柄、自动缓冲区、要读取的字节以及文件中的偏移量。在Perl中,文件的打开和关闭在大多数情况下是自动的
您没有指定足够的信息来编写示例,但此链接应该可以帮助您开始:
或者只是谷歌“perl系统读取”
您想要的可能可以在Perl 1行程序中完成。od有许多输出选项。您使用了什么选项?所以“文本表示法”实际上是指“十六进制”?不会将二进制整数编码转换为整数对不起。不是他想要的。阅读片段。只输出以NUL字符结尾的可打印字符。因此,结合Norman和Nikolai的答案:od-v-An-td4应该会得到想要的结果+1。这是更简单的解决方案。这应该是公认的答案。