了解其工作原理

Understanding how this works

本文关键字:工作 了解      更新时间:2023-10-16

我目前正在学校学习C++,我们接到了一项将二进制转换为ASCII的作业。

我和我的朋友在这个网站上找到了这个代码。

#include <bitset>
#include <fstream>
int main() 
{
std::ofstream fout("ASCII.txt");
std::ifstream fin("Binary.txt");
char ic;
std::bitset<8> oc;
int i = 8;
while (fin >> ic) 
{
oc[--i] = ic - '0';
if (0 == i) 
{
fout << static_cast<char>(oc.to_ulong());
i = 8; 
} 
}
return 0; 
}

有一点空闲时间的人可以更详细地解释这意味着什么吗? 我们确实了解"fstream"以及他如何读取文件。 但是位集有点模糊,我们找不到任何关于它如何工作的 GOODGOOD 教程,以及在 -for 和 -while 循环期间会发生什么。 谢谢!

代码打开两个文件:

ASCII.txt 通过ofstream类实例打开以进行写入,fout

二进制.txt 通过ifstream类实例打开以供读取,fin

bitset只是一个位数组。oc是 8 位的位集,实际上是 1 个字节。

while 循环按如下方式进行:

  • fin >> ic:从fin(二进制.txt(中读取一个字符并复制到ic(大概这是一个'0''1'字符。

  • ic - '0':通过减去字符'0'的 ascii 值,将上面读取的 ascii 字符直接转换为0ic1的数字。

  • oc[--i] =递减i,然后将01位打包到位组的位置i

  • fout << static_cast<char>(oc.to_ulong());:每 8 次循环迭代一次,一个位集现在已满,是一个完整的字节。将其转换回整数,转换为"char"并将字符写回fout(ASCII.txt(。这句话中有很多内容。

  • 循环继续,直到没有更多的字节要从fin读取(二进制.txt(