我在 C 中有以下代码,它将根据输入的序列号生成密钥。
unsigned int32 passkey(unsigned int32 snumber)
{
char snstring[11];
unsigned int32 pwd;
int i = 0;
itoa(snumber,10,snstring);
do{
snstring[i+1] -= '0';
snstring[i] = ~snstring[i+1];
snstring[i] &= 0x07;
i++;
}while(i < 9);
snstring[9] <<= 1;
snstring[9] &= 0x07;
pwd = atoi32(snstring);
return (pwd);
}
我需要将其转换为 C# 代码,我尝试过以下操作:
private uint ComputeKey(uint snumber)
{
char[] snstring = new char[11];
UInt32 pwd;
int i = 0;
snstring = snumber.ToString().ToCharArray();
do
{
snstring[i + 1] = Convert.ToChar(snstring[i + 1] - '0');
snstring[i] = Convert.ToChar(~Convert.ToInt32(snstring[i + 1]));
snstring[i] &= Convert.ToChar(Convert.ToInt32(0x07));
i++;
} while (i < 9);
snstring[9] <<= 1;
snstring[9] &= Convert.ToChar(0x07);
pwd = Convert.ToUInt32(snstring);
return (pwd);
}
snstring[i] = Convert.ToChar(~Convert.ToInt32(snstring[i + 1]));
程序在这一行抛出异常。
另一个值得注意的行为是,例如我输入为
151972634
然后,在这一行snstring[i] = Convert.ToChar(~Convert.ToInt32(snstring[i + 1]));
的值为snstring[i+1]
is'\u0005'
并且它抛出 OverflowException was Unhandled。
我不确定我应该做什么,任何帮助表示赞赏。