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+1]
이 라인 snstring[i] = Convert.ToChar(~Convert.ToInt32(snstring[i + 1]));
값에,
로 입력을해야한다는 것입니다 것은
'\u0005'
이며 OverflowException이 처리되지 않은이었다가 발생합니다.내가 무엇을해야하는지 잘 모르겠다. 어떤 도움을 주시면 감사하겠습니다.
결과 (snstring [I + 1])'은 범위 밖에 숯불로 변환 될 수 없다. 받아 들여. –
'int'와'char' 사이를 앞뒤로 변환하는 것을 멈 춥니 다. 일단'int'로 변환하고, 모든 비트 twiddling을 적용한 다음 다시 변환하십시오. – Phylogenesis
좋은 이전 workign c 함수를 사용하지 않는 이유는 무엇입니까? 참조 : http://stackoverflow.com/a/11593657/3989673 – bigahega