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.但就我看来,这并不适用.你能给我一个暗示吗?
在C++中,整数可以用在if语句中.在C#中,您只能使用评估为的表达式bool.您的表达式temp & seed不会计算为布尔值.您应该将C#中的条件更改为:
if(0 != (temp & seed)) {}
Run Code Online (Sandbox Code Playgroud)
尝试
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变量是否有标志(seed或NC_UDS_KEYMASK).
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |