有很多图形化的二进制查看器。比如Binary Viewer。
但是Binary Viewer最大支持打开4GB的文件。我遇到了一个7GB的文件。用这种查看器的软件查看,还会卡。因为他们可能是直接把所有数据或者大部分读到内存里。这样你一读你的电脑就卡爆。
有时候只是想单纯获取一个超大文件的几位二进制而已。那怎么办。
可以自己实现一个简易的命令行二进制查看器。
随手把自己写的分享过来
/*
* Copyright (c) 2024 playmaker90
* All rights reserved.
*
* Author: playmaker90
* Source: CSDN
*/
#include <stdio.h>
#include <stdlib.h>
void print_binary(unsigned char byte) {
for (int i = 7; i >= 0; i--) {
printf("%c", (byte & (1 << i)) ? '1' : '0');
}
}
void view_binary_data(const char *filename, long start, long count) {
FILE *file = fopen(filename, "rb");
if (!file) {
perror("Error opening file");
exit(EXIT_FAILURE);
}
if (fseek(file, start, SEEK_SET) != 0) {
perror("Error seeking file");
fclose(file);
exit(EXIT_FAILURE);
}
for (long i = 0; i < count; i++) {
int byte = fgetc(file);
if (byte == EOF) {
if (feof(file)) {
printf("Reached end of file after reading %ld bytes.\n", i);
} else {
perror("Error reading file");
}
break;
}
print_binary((unsigned char)byte);
printf(" ");
}
printf("\n");
fclose(file);
}
int main(int argc, char *argv[]) {
if (argc != 4) {
fprintf(stderr, "Usage: %s <filename> <start> <count>\n", argv[0]);
return EXIT_FAILURE;
}
const char *filename = argv[1];
long start = atol(argv[2]);
long count = atol(argv[3]);
view_binary_data(filename, start, count);
return EXIT_SUCCESS;
}
/*
使用方法:
编译:
g++ .\C_HEX_READER.cpp -o C_HEX_READER.exe
运行:
.\C_HEX_READER.exe "C:\Users\R0.dat" 524288001 200
(查看第524288001位之后的200字节数据)
linux系统去掉命令中可执行文件的.exe即可
*/