Déencoding de la valeur du code à barres numérisé en valeur int

Quand je scanne le code à barres et que j'obtiens une certaine valeur si elle est égale à 2 alors je dois afficher avec == et si elle est égal à 3 alors je dois afficher avec = et si la valeur est 4 alors invalide.

Mais les codes à barres scannés sont de valeur entière – lors du déencoding à l'aide de NSASCII il affiche uniquement jusqu'à la valeur 127 après qu'il affiche des résultats invalides. Par exemple: si ma valeur de code à barres = 9699 la valeur de résultat = jem alors ma valeur de résultat ajoutée = jem= valeur de la string actuelle = valeur de l' asc n'indique que 37

Voici mon code:

 - (void) readerView:(ZBarReaderView *)view didReadSymbols:(ZBarSymbolSet *)syms fromImage:(UIImage *)img { // do something useful with results -- cool thing is that you get access to the image too for (ZBarSymbol *symbol in syms) { [resultsBox setText:symbol.data]; if ([resultsBox.text length] == 2) { addedresult.text = [resultsBox.text ssortingngByAppendingSsortingng:@"=="]; } else if ([resultsBox.text length] == 3) { addedresult.text = [resultsBox.text ssortingngByAppendingSsortingng:@"="]; } if ([resultsBox.text length] >= 4) { addedresult.text = @"Invalid"; } [Base64 initialize]; NSSsortingng *mySsortingng = [[NSSsortingng alloc]initWithSsortingng:addedresult.text]; NSData * data = [Base64 decode:mySsortingng]; NSSsortingng * actualSsortingng = [[NSSsortingng alloc] initWithData:data encoding:NSASCIISsortingngEncoding]; NSLog(@"%@",actualSsortingng); labeltext.text= actualSsortingng; int asc = [actualSsortingng characterAtIndex:0]; label.text = [NSSsortingng ssortingngWithFormat:@"%d", asc]; [actualSsortingng release]; break; } } 

Depuis que quelqu'un a relancé les commentaires de cette question, je vais relancer tout ce post.

Vous ne devriez pas passer par NSData pour créer un NSSsortingng à partir de quelque chose que vous avez déjà, et vous perdez probablement quelque chose en cours de route. Accédez directement à NSSsortingng en utilisant ssortingngWithFormat. En outre, ASCII reviendra et octet plus tard, si vous avez le choix, utilisez UTF8.

 NSSsortingng *actualSsortingngUTF8 = [NSSsortingng ssortingngWithFormat:@"%@",[addedresult.text urlEncodeUsingEncoding:NSUTF8SsortingngEncoding]]; NSSsortingng *actualSsortingngASCII = [NSSsortingng ssortingngWithFormat:@"%@",[addedresult.text urlEncodeUsingEncoding:NSUTF8SsortingngEncoding]]; NSLog(@"%@",actualSsortingngUTF8); NSLog(@"%c",[actualSsortingngUTF8 UTF8Ssortingng]); //This is a const char* 

Deuxièmement, j'ai regardé dans le SDK et dit que symbol.data est déjà un NSSsortingng *. Selon ce que vous voulez, vous n'aurez peut-être rien à faire. Si vous avez besoin de changer d'enencoding, assurez-vous de comprendre pourquoi vous devez le faire (une bonne raison est que "le rest de l'application utilise NS **** SsortingngEncoding").

Assurez-vous également de comparer les strings de manière correcte "Objective-C":

 [actualSsortingng isEqualToSsortingng: testSsortingng]; 

NOT currentSsortingng == testSsortingng;