用c++从磁盘读取数据
Read data from a disk in c++
我正在尝试读取分区表之外的一些数据,我可以成功读取原始数据,但它似乎是用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,然后强制将字符打印为无符号整数。
(如果您有兴趣了解更多关于C++的信息,也可以使用std::copy
和std::ostream_iterator
来避免自己编写循环)
相关文章:
- 如何在ros2中从rosbag2读取数据
- OpenCV 和从 OutputArrays 或 (Mat) 读取数据
- 使用C++从磁卡读卡器MT188读取数据
- HDF5 简单读取数据集失败
- 嵌套结构,从由空行分隔的文件中读取数据
- 不要从输入队列套接字读取数据
- 从文件中读取数据,操作员>>
- 如何从excel文件中读取数据并存储到变量中?
- C++:从文件中读取x y数据会产生无限循环吗
- 无法通过FT232RL读取数据
- 如何从QNetworkReply读取数据?
- C++ 逐行从文件(包含空格)读取数据
- 通过显示一行星号来创建条形图,该条形图将读取数据的输入文件
- 我们可以从 TXT 文件中读取数据并使用 C 和 C++ 将其保存到 SQL 数据库吗?
- 从多个 tcp 连接读取数据
- 从文本文件中读取数据并删除所有换行符空格,并在 C++ 控制台中显示
- Qt TCP服务器不从客户端读取数据
- 累积从 C++11 中的文件中读取数据的整数
- 从 txt 文件中读取数据的最简单方法
- 从 txt 文件中读取数据的 Getline