c ++到c#for语句

Ola*_*cea 1 c# c++

unsigned long uds_calc_key(unsigned long seed)
{
    unsigned long temp;
    unsigned short int  index;
    unsigned short int  mult1;
    unsigned short int  mult2;

    if(seed == 0)
    {
        seed = NC_DEFAULT_SEED;
    }
    else
    {}

    for (index=0x5D39, temp=0x80000000; temp; temp>>=1)
    {
        if (temp & seed)
        {
            index = croshortright(index, 1);
            if (temp & NC_UDS_KEYMASK)
            {
                index ^= 0x74c9;
            }
        }
    }

    mult1 = (nc_uds_keymul[(index>>2) & ((1<<5)-1)]^index);
    mult2 = (nc_uds_keymul[(index>>8) & ((1<<5)-1)]^index);
    temp = (((unsigned long)mult1)<<16)|((unsigned long)mult2);
    temp = mulu32(seed,temp);
    return temp;
}
Run Code Online (Sandbox Code Playgroud)

我不明白如何在for语句中转换该临时值.我将临时值定义为uint,我得到一个错误,如:

Cannot implicitly convert type 'uint' to 'bool';
Run Code Online (Sandbox Code Playgroud)

我理解在C++中零是false,而不是零的事实true.但就我看来,这并不适用.你能给我一个暗示吗?

Mar*_*ila 7

在C++中,整数可以用在if语句中.在C#中,您只能使用评估为的表达式bool.您的表达式temp & seed不会计算为布尔值.您应该将C#中的条件更改为:

if(0 != (temp & seed)) {}
Run Code Online (Sandbox Code Playgroud)


xan*_*tos 5

尝试

for (index=0x5D39, temp=0x80000000; temp != 0; temp>>=1)
Run Code Online (Sandbox Code Playgroud)

if ((temp & seed) != 0)
Run Code Online (Sandbox Code Playgroud)

if ((temp & NC_UDS_KEYMASK) != 0)
Run Code Online (Sandbox Code Playgroud)

这两个if检查temp变量是否有标志(seedNC_UDS_KEYMASK).