从二进制文件读取

安舒尔

我试图从二进制文件计算零和一的数目。问题是,我得到了正确的答案。的零,但出来等于零。零。我正在做的是按char读取文件char。由于最多可以包含256个字符,因此我将结果存储在零和1的临时数组中,如果再次出现字符,则从那里检索。

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
void func(int* a1 ,int* a2)
{
    for(int i=0;i<256;i++)
    for(int j=0;j<8;j++)
    {
        if( (i & 1) ==1 )
        {
            a1[i]+=1;
        }
        else if( (i & 1) ==0 )
        {
            a2[i]+=1;   
        }
        i>>1;
    }
}
int main()
{
    int zero[256];
    int one[256];
    int tzero[256];
    int tone[256];
    for(int i=0;i<256;i++)
    {
        zero[i]=0;
        one[i]=0;
        tzero[i]=0;
        tone[i]=0;
    }
    func(tone,tzero);
    FILE* input;
    FILE* output;
    output=fopen("ascii.txt","w");
    input=fopen("one.bin","r");
    int c;
    while((c=fgetc(input))!=EOF)
    {
        fprintf(output,"%d\n",c);
        zero[c]+=tzero[c];
        one[c]+=tone[c];
    }
    int zeroes=0;
    int ones=0;
    for(int i=0;i<=255;i++)
    {
        zeroes+=zero[i];
        ones+=one[i];
    }
    cout<<"zeroes:"<<zeroes<<endl;
    cout<<"ones:"<<ones<<endl;
    fclose(input);

    fclose(output);

}
谢尔盖·卡里尼琴科(Sergey Kalinichenko)

循环才是最重要的零和破坏的价值c

c >>= 1;

在完成所有八个移位之后,c始终为零,因此以下代码将增加错误的计数:

// The value of c is always zero
tzero[c]=z;
tone[c]=o;
one[c]+=tzero[c];
zero[c]+=tzero[c];

您应该c在位计数循环之前保存值,并在循环结束后恢复它。

更重要的是,计算的值tzero[]tone[]前期,无需等待它们在文件中出现。这将使您的主循环的主体非常短而干净:

while((c=fgetc(input))!=EOF) {
    one[c] += tzero[c];
    zero[c] += tzero[c];
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

打开并读取二进制文件(javascript)

来自分类Dev

如何从二进制文件读取多个结构

来自分类Dev

C ++:提高ifstream二进制文件的读取速度

来自分类Dev

在C ++中读取二进制文件的正确方法?

来自分类Dev

Haskell:懒惰地读取二进制文件

来自分类Dev

从C中的文件读取二进制整数

来自分类Dev

将图像读取为二进制文件

来自分类Dev

从二进制文件C ++读取16位整数

来自分类Dev

读取二进制文件会导致垃圾值

来自分类Dev

从二进制文件读取char *

来自分类Dev

从二进制文件读取巨型int数组

来自分类Dev

在python中读取二进制文件时的偏移

来自分类Dev

在Spark Scala中读取二进制文件

来自分类Dev

用Ruby读取不同大小的二进制文件

来自分类Dev

用于读取二进制文件的迭代器

来自分类Dev

C:从二进制文件读取字节

来自分类Dev

如何使用VBScript从二进制文件读取

来自分类Dev

大块读取二进制文件

来自分类Dev

读取文件为二进制/十六进制

来自分类Dev

从MongoDB读取二进制文件

来自分类Dev

从二进制文件读取

来自分类Dev

Haskell:用二进制懒惰地读取二进制文件

来自分类Dev

读取二进制文件c

来自分类Dev

读取大型二进制文件

来自分类Dev

读取已发布的二进制文件并写入新的二进制文件

来自分类Dev

读取/写入二进制文件

来自分类Dev

分批读取二进制文件

来自分类Dev

从二进制文件中读取

来自分类Dev

读取整数的二进制文件