加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在c中读取磁盘中的数据

发布时间:2020-12-16 07:25:36 所属栏目:百科 来源:网络整理
导读:我正在尝试读取分区表之外的一些数据,我可以成功读取原始数据,但它似乎是用Unicode(UTF-8)或其他东西编码的.有一个应用程序已经编写来读取这些数据并正确显示它,所以我知道它可以完成. 这个数据被称为“图像安全数据”,这是Novell ZenWorks在第六个扇区(0x05
我正在尝试读取分区表之外的一些数据,我可以成功读取原始数据,但它似乎是用Unicode(UTF-8)或其他东西编码的.有一个应用程序已经编写来读取这些数据并正确显示它,所以我知道它可以完成.

这个数据被称为“图像安全数据”,这是Novell ZenWorks在第六个扇区(0x05)放置在磁盘上的东西.

原始数据如下所示:

ZISD♂   ??      ?   └? ├└? ?    ?3?G    ╓?╝Y    ≡   ?   §   ╗?9%¥?+0Ka?ê


  :?               @   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,NULL);

    SetFilePointer(hDisk,0xA00,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打印为unsigned int.

(如果你有兴趣了解更多关于C你could also use std::copy and std::ostream_iterator以避免自己编写循环)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读