C++ 将硬盘上的位XXX从0更改为1

C++ 将硬盘上的位XXX从0更改为1,c++,encryption,storage,C++,Encryption,Storage,我正在进行一个项目,以创建一个自己的加密。 我知道这将是不安全的,我只想为我自己和测试原因使用它 对于算法的基本知识,我需要将硬盘上的位号XY从0更改为1。 问题是我真的不知道怎么做。我将使用一个完全新的驱动器为这个项目,它从来没有数据 假设这个驱动器将是250GB,我想把这个驱动器的第一位从0改为1,我需要怎么做? 我是否需要创建一个只有0的大文件,或者我是否可以直接告诉驱动器上的写入部分,它需要转到XY位置,并将该位置上的位从0更改为1 我想用C++来实现这个项目的最大速度。 谢谢您的建议。

我正在进行一个项目,以创建一个自己的加密。 我知道这将是不安全的,我只想为我自己和测试原因使用它

对于算法的基本知识,我需要将硬盘上的位号XY从0更改为1。 问题是我真的不知道怎么做。我将使用一个完全新的驱动器为这个项目,它从来没有数据

假设这个驱动器将是250GB,我想把这个驱动器的第一位从0改为1,我需要怎么做? 我是否需要创建一个只有0的大文件,或者我是否可以直接告诉驱动器上的写入部分,它需要转到XY位置,并将该位置上的位从0更改为1

我想用C++来实现这个项目的最大速度。
谢谢您的建议。

在Linux上,使用root运行时,您可以将整个驱动器作为一个文件进行寻址。类似于下面的方法来切换分区的第一位

int f = -1;
unsigned char data = 0;

f = open("/dev/hdb1", O_RDWR);
read(f, &data, 1);
data = data ^ 0x80;
lseek(f, SEEK_SET, 0);
write(f, &data, 1);
close(f);

其中,
/dev/hdb1
可能是第二个驱动器上的第一个分区。您可能还可以为整个驱动器本身寻址
/dev/hdb

在Linux上,使用root运行时,您可以将整个驱动器作为一个文件进行寻址。类似于下面的方法来切换分区的第一位

int f = -1;
unsigned char data = 0;

f = open("/dev/hdb1", O_RDWR);
read(f, &data, 1);
data = data ^ 0x80;
lseek(f, SEEK_SET, 0);
write(f, &data, 1);
close(f);

其中,
/dev/hdb1
可能是第二个驱动器上的第一个分区。您可能还可以为整个驱动器本身寻址
/dev/hdb

好的,我决定创建一个只包含
null
字节的文件。 如果我想更改单个位,我将使用以下计算:

int bit = XXX; //BIT that will be adjusted
double byte = bit / 8; //Byte that contains BIT
Byte b = getByte( (int)byte ); //save the Byte
b = adjustByte( b, (int)((byte - bit)*8), VALUE ); //adjust the Byte with ASCII symbol
saveByteToFile( b, byte ); //save the Byte back to File to old position
这只是伪代码。
如果有人有更好的解决方法,请告诉我。

好的,我决定创建一个只包含
null
字节的文件。 如果我想更改单个位,我将使用以下计算:

int bit = XXX; //BIT that will be adjusted
double byte = bit / 8; //Byte that contains BIT
Byte b = getByte( (int)byte ); //save the Byte
b = adjustByte( b, (int)((byte - bit)*8), VALUE ); //adjust the Byte with ASCII symbol
saveByteToFile( b, byte ); //save the Byte back to File to old position
这只是伪代码。
如果有人有更好的解决方法,请告诉我。

dosen't
data=data^0x80把它变成一个完整的字节?如果我将其写入位1,然后对位2执行同样的操作,我会覆盖位号1还是不覆盖位号?
data=data^x80
切换
data
中的第一个(高阶)位,并保持其他7位不变把它变成一个完整的字节?如果我将其写入位1,然后对位2执行相同的操作,我会覆盖位号1还是不覆盖?
data=data^x80
切换
data
中的第一个(高阶)位,并保持其他7位不变。不要使用类型为
double
的变量来计算文件中的字节偏移量<代码>位/8
无论如何都是一个整数表达式。坚持整数。字节偏移量为
位/8
。但该字节内的位偏移量很容易计算为
位%8
。那个
(字节位)*8
表达式毫无意义。我想你需要学习更多关于C语言中整数类型和位运算的知识才能在这方面发挥作用。不要使用
double
类型的变量来计算文件中的字节偏移量<代码>位/8无论如何都是一个整数表达式。坚持整数。字节偏移量为
位/8
。但该字节内的位偏移量很容易计算为
位%8
。那个
(字节位)*8
表达式毫无意义。我想你需要学习更多关于C语言中整数类型和位运算的知识才能在这方面发挥作用。什么操作系统?什么操作系统?