我正在尝试读取硬盘扇区以获取原始数据。现在,经过大量搜索后,我发现有些人将原始扇区数据存储在 hex 中,有些则存储在 char 中。
哪个更好,为什么?哪个会给我更好的表现?
我正在尝试用 C++ 编写它,操作系统是 Windows。
为了澄清 -
#include <iostream>
#include <windows.h>
#include <winioctl.h>
#include <stdio.h>
void main() {
DWORD nRead;
char buf[512];
HANDLE hDisk = CreateFile("\\\\.\\PhysicalDrive0",
GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, 0, NULL);
SetFilePointer(hDisk, 0xA00, 0, FILE_BEGIN);
ReadFile(hDisk, buf, 512, &nRead, NULL);
for (int currentpos=0;currentpos < 512;currentpos++) {
std::cout << buf[currentpos];
}
CloseHandle(hDisk);
std::cin.get();
}
请考虑由其他人而不是我编写的上述代码。
注意数据类型 char buf[512]; .以数据类型存储为 char,并且尚未转换为十六进制。
最佳答案
原始数据只是“原始数据”……您按原样存储它,不对其进行转换。所以,这里没有性能问题。最多的区别在于以人类可读的格式表示原始数据。一般而言:
- 如果其中包含一些文本,以字符格式表示更容易理解,
- 虽然十六进制更适合表示数字数据(如果它遵循某种模式)。
在您的特定情况下:char 仅表示 1 个字节。所以您确定您将数据存储在 512 字节的缓冲区中。根据整数大小分配这样的空间会使事情变得不必要地复杂
关于c++ - 读取硬盘扇区原始数据 - 为什么是十六进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12815478/