如何在 C 中反转以下算法

How do I reverse the following algorithm in C

我有以下算法:

    unsigned long specialNum=0x4E67C6A7;
    unsigned int ch;
    char inputVal[]="                        AAPB2GXG";


    for(int i=0;i<strlen(inputVal);i++)
    {
        ch=inputVal[i];

        ch=ch+(specialNum*32);
        ch=ch+(specialNum/4);

        specialNum=bitXor(specialNum,ch);
    }

    int outputVal=specialNum;

bitXor 只是做异或运算:

int bitXor(int a,int b)
{
    return (a & ~b) | (~a & b);
}

现在我想反转算法。给定 outputVal,我想得到 inputVal。 这是我到目前为止所做的。但它不起作用:(

    while(outputVal!=0x4E67C6A7)
    {
        ch=bitXor(outputVal,0x4E67C6A7);

        outputVal=outputVal-(ch*4);
        outputVal=outputVal-(ch/32);
        inputVal[i++]=(char)ch;
        if(i>32)
            break;
    }

编辑:好的,同意这是不可能的。但我想知道为什么我的问题被否决了。我在发帖前遵循了指南,我认为这个问题不至于太糟糕,不能投票。

在请求的 "reversed" 算法中,您要求将 4 字节数字转换为任意长度的字符串。这显然是不可能的,因为假设你这样做,你已经发明了一种终极压缩算法。

你要求的"reverse algorithm"是不可能的。你的例子 inputVal 是一个长度超过 30 个字母的字符串。您的 outputVal 最多为 4 或 8 个字节。信息论表明,如果 n > k,则不可能将任意 n 字节字符串存储到 k 字节字符串中。

你的前向算法基本上是以一种笨拙的方式将数组 inputVal 中的值打包到标量变量 specialNum 中。

此外,最后有一个从 unsigned long specialNumint outputVal 的不安全转换。