c++ to c# for statement

本文关键字:statement for to c++ | 更新日期: 2023-09-27 18:28:39

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;
}

我不明白如何在 for 语句中转换该临时值。我将临时值定义为uint,并收到如下错误:

Cannot implicitly convert type 'uint' to 'bool';

我理解这样一个事实,即在C++中,零是false,任何不为零的东西都是true.但据我所知,这并不适用。你能给我一个提示吗?

c++ to c# for statement

在C++中,整数可以在if语句中使用。在 C# 中,只能使用计算结果为 bool 的表达式。表达式temp & seed的计算结果不是布尔值。应将 C# 中的条件更改为:

if(0 != (temp & seed)) {}

尝试

for (index=0x5D39, temp=0x80000000; temp != 0; temp>>=1)

if ((temp & seed) != 0)

if ((temp & NC_UDS_KEYMASK) != 0)

两个 if 正在检查 temp 变量是否有标志(seedNC_UDS_KEYMASK (。

C# 不会将任何内容隐式转换为bool。自己创建布尔值:myInt != 0 .

C# 这样做是为了避免常见的编码错误,但代价是稍微更冗长。

我相信

错误就在这里:

if (temp & seed)

temp不属于boolean类型

您必须将表达式更改为 if (temp != 0) 或创建另一个类型为 bool 的变量:

例如bool isTemp;

并在有条件的情况下检查。

 if (isTemp) { }