gpt4 book ai didi

c++ - C++从磁盘读取数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:13:04 26 4
gpt4 key购买 nike

我正在尝试读取分区表之外的一些数据,我可以成功读取原始数据,但它似乎是以 Unicode (UTF-8) 或其他方式编码的。已经编写了一个应用程序来读取此数据并正确显示它,所以我知道它可以完成。

此数据称为“图像安全数据”,它是 Novell ZenWorks 放置在磁盘第六扇区 (0x05) 上的内容。

原始数据如下所示:

ZISD♂   Æ☻      ☺   └¿ ├└¿ ☺    ñ3åG    ╓ï╝Y    ≡   ♣   §   ╗ç9%¥⌂+0Kâ¬ê


:☺ @ f 8 b 3 4 6 6 2 9 3 b 3 2 b b f d c 8 c b d 6 2 2 1 2 1 0 d
2 1 ♫ M H S T R E E ▬ F H I F L 0 0 0 5 9 3 L \ \ F H 0 1 F S N T H 0
9 \ A P P S \ i m g s \ C X P P N 6 7 1 0 B . z m g $ t r i n i t y - h e a l
t h . o r g ▬ F H I F L 0 0 0 5 9 3 H Z N W

我用C++写了下面的代码直接从磁盘读取数据:

#include <iostream>
#include <windows.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);
}

我是 C++ 的新手。我需要找到一种方法来输出这些数据,以便在可能的情况下可以通过脚本读取。它看起来是由不一致的字符分隔的。

最佳答案

当您打印它时,您将数据解释为 char。一些值在 a-zA-Z“正常,可打印”范围内,因此可以按照您的预期进行打印。其他的,比如 '0' 是特殊的,不能直接打印。您可能希望将字节打印为十六进制,而不是字符。为此:

std::cout << std::hex << std::setw(2) << std::setfill('0') << unsigned(buf[currentpos]) << " ";

这告诉 ostream 打印两位十六进制数,如果少则使用 0,然后强制将 char 打印为无符号整数。

(如果您有兴趣了解更多有关 C++ 的信息,请 could also use std::copy and std::ostream_iterator 以避免自己编写循环)

关于c++ - C++从磁盘读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6126709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com