Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否有一个好的Unix命令用于转储二进制文件的文本表示?_C++_C_Unix_Text_Binary - Fatal编程技术网

C++ 是否有一个好的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

我有一些包含整数的二进制文件。是否有一些很好的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<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。这是更简单的解决方案。这应该是公认的答案。