我想知道是否有办法将文件的 hexdump 或原始数据输出到 txt 文件。例如,我有一个文件,比如说“data.jpg”(文件类型无关紧要)如何将 HEXdump(14ed 5602 等)导出到文件“output.txt”?还有我如何指定输出的格式,例如 Unicode 或 UTF?在 C++ 中
问问题
3790 次
3 回答
2
您可以使用循环、fread 和 fprintf:使用 read 获取字节的字节值,然后使用 fprintf 您可以使用 将%x
十六进制打印到文件中。
如果您希望它更快,您可以加载整个机器字(int 或 long long)而不是单个字节,如果您希望它更快,您可以读取整个数组,然后 sprintf 整个数组,然后 fprintf 该数组到文件。
于 2011-03-18T12:57:34.487 回答
2
也许是这样的?
#include <sstream>
#include <iostream>
#include <iomanip>
#include <iterator>
#include <algorithm>
int main()
{
std::stringstream buffer( "testxzy" );
std::istreambuf_iterator<char> it( buffer.rdbuf( ) );
std::istreambuf_iterator<char> end; // eof
std::cout << std::hex << std::showbase;
std::copy(it, end, std::ostream_iterator<int>(std::cout));
std::cout << std::endl;
return 0;
}
您只需替换buffer
为读取二进制文件的 ,然后使用代替ifstream
将输出写入文本文件。ofstream
cout
于 2011-03-18T13:32:50.243 回答
1
这已经很老了——如果你想要 Unicode,你必须自己添加它。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
unsigned long offset = 0;
FILE *input;
int bytes, i, j;
unsigned char buffer[16];
char outbuffer[60];
if ( argc < 2 ) {
fprintf(stderr, "\nUsage: dump filename [filename...]");
return EXIT_FAILURE;
}
for (j=1;j<argc; ++j) {
if ( NULL ==(input=fopen(argv[j], "rb")))
continue;
printf("\n%s:\n", argv[j]);
while (0 < (bytes=fread(buffer, 1, 16, input))) {
sprintf(outbuffer, "%8.8lx: ", offset+=16);
for (i=0;i<bytes;i++) {
sprintf(outbuffer+10+3*i, "%2.2X ",buffer[i]);
if (!isprint(buffer[i]))
buffer[i] = '.';
}
printf("%-60s %*.*s\n", outbuffer, bytes, bytes, buffer);
}
fclose(input);
}
return 0;
}
于 2011-03-18T13:15:16.637 回答