c++ - 读取硬盘扇区原始数据 - 为什么是十六进制?

标签 c++ file-io hex

我正在尝试读取硬盘扇区以获取原始数据。现在,经过大量搜索后,我发现有些人将原始扇区数据存储在 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/

相关文章:

java - 通过套接字损坏的十六进制消息

python - 如何在 Python 中解压缩二进制十六进制格式的数据?

Swift 通过 TCP 套接字发送十六进制数据

c++ - 如果要执行 const_cast,为什么要将参数设置为 const?

c++ - 选择多个表 MySQL

c++ - 使用 Boost.Program_options 的输入流运算符查找顺序

C++:通过基类中定义的函数指针从派生调用函数

c++ - 从文件读取到特殊字符

c# - 如何在创建文件夹时移动文件。目录.方法等

PHP标准输入?