J'ai le code suivant dans C qui va générer des clés basées sur le numéro de série d'entrée.complément de bits d'un caractère dans C# vs C overflowexception
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);
}
J'ai besoin de convertir en code C#, j'ai essayé suivante:
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);
}
programmes génère une exception sur snstring[i] = Convert.ToChar(~Convert.ToInt32(snstring[i + 1]));
cette ligne.
Un autre comportement notable est que, par exemple, j'ai entrée comme
Ensuite, cette valeur de ligne snstring[i] = Convert.ToChar(~Convert.ToInt32(snstring[i + 1]));
de snstring[i+1]
est '\u0005'
Et il jette OverflowException était Unhandled.
Je ne suis pas sûr de ce que je devrais faire, toute aide est appréciée.
Le résultat de '~ Convert.ToInt32 (snstring [i + 1])' ne peut pas être converti en char comme il est hors de la plage. Faites avec. –
Arrête la conversion entre 'int' et' char'. Convertir en 'int' une fois, appliquer tous les bits twiddling, puis reconvertir. – Phylogenesis
Pourquoi ne pas utiliser la bonne vieille fonction c workign? Voir: http://stackoverflow.com/a/11593657/3989673 – bigahega