c++ - 如何计算文件中的零和一?

标签 c++ binary

给定一个文件(二进制文件或文本文件),用 C++ 计算该文件的二进制表示中的 1 和 0 的最快或最优雅的方法是什么?

最佳答案

我建议您使用结果数组:

unsigned char cheating[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3,
        4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2,
        3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4,
        5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2,
        3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4,
        5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5,
        6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3,
        4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3,
        4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6,
        7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4,
        5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5,
        6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 };

在以unsigned char 数组形式读取文件后,您可以求和:

    for (int i = 0; i < arraysize; i++) {
        sum0+=8-cheating[unsignedbytearray[i]];
        sum1+=cheating[unsignedbytearray[i]];
    }

很难写代码,那会更快或更优雅:P

关于c++ - 如何计算文件中的零和一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3902609/

相关文章:

c++ - std::condition_variable::wait_for 和 std::condition_variable::wait_until 有什么区别?

c++ - 相同的 AVX2 程序在 gcc 和 msvc 中产生不同的结果

c - 如何将二进制文件转换为声明具有该内容的 C/C++ 数组的文本?

mysql - 如何在MySQL中存储二进制数据

c++ - 我得到的输出是 111 的原因是什么?

c++ - 使用 glm 在本地和全局方向上旋转和平移对象

c++ - FFTW 函数 n2fv_64

c# - 二进制到 BigInteger 代码的 ArgumentOutOfRange 异常

c - 二进制供电给了我错误的结果

python - 在 Python 3 中计算 Intel Hex 记录的校验和