我在C中有下面的代碼,它將根據輸入的序列號生成密鑰。C#中的字符與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]));
此行拋出異常。
另一個值得注意的行爲是例如我已經輸入作爲
然後,在這條線的snstring[i] = Convert.ToChar(~Convert.ToInt32(snstring[i + 1]));
值snstring[i+1]
是'\u0005'
而且它拋出OverflowException異常是未處理的。
我不知道我該怎麼做,任何幫助表示讚賞。
的'〜Convert.ToInt32結果(snstring第[i + 1])'無法轉換爲char,因爲它在該範圍之外。處理它。 –
停止在'int'和'char'之間來回轉換。轉換爲'int'一次,應用所有位,然後轉換回來。 – Phylogenesis
爲什麼不使用良好的舊工作c函數?請參閱:http://stackoverflow.com/a/11593657/3989673 – bigahega