字符串或文件熵

时间:2018-01-08 18:23:58

标签: c entropy

我正在尝试编写字符串\文件熵计算器。这是我写的代码,但它不起作用:

double entropy(char* buf)
{
    int*   rgi = (int*)_alloca(256);
    int*   pi  = rgi + 256;
    double H   = 0.0;
    double cb  = sizeof(buf);

    for (int i = sizeof(buf); --i >= 0;)
    {
        rgi[buf[i]]++;
    }

    while (--pi >= rgi)
    {
        if (*pi > 0)
        {
            H += *pi * log2(*pi / cb);
        }
    }

    return -H / cb;
}

我做错了什么?

1 个答案:

答案 0 :(得分:3)

我认为你有4个问题

1)永远不会初始化分配的内存

2)分配的内存太少,因为每个整数只分配1个字节

3)<div id="sorttable">使用char可能会遇到问题,因为buf可能会签名

4)sizeof(buf)给出了char指针的大小,但缓冲区的大小

除此之外,我认为你通过向后迭代使代码过于复杂。

试试这个:

char