将扫描的条码值解码为整数值

当我扫描条形码,如果它是等于= 2 ,我得到一些价值,那么我需要显示== ,如果它是等于= 3,那么我需要显示= ,如果值是4则无效。

但扫描条形码是整数值 – 当使用NSASCII解码时, NSASCII显示直到值127 ,然后显示无效结果。 例如:如果我的条形码值= 9699 ,结果值= jem那么我添加的结果值= jem= actualstring值= åasc值id只显示37

这是我的代码:

 - (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 stringByAppendingString:@"=="]; } else if ([resultsBox.text length] == 3) { addedresult.text = [resultsBox.text stringByAppendingString:@"="]; } if ([resultsBox.text length] >= 4) { addedresult.text = @"Invalid"; } [Base64 initialize]; NSString *myString = [[NSString alloc]initWithString:addedresult.text]; NSData * data = [Base64 decode:myString]; NSString * actualString = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; NSLog(@"%@",actualString); labeltext.text= actualString; int asc = [actualString characterAtIndex:0]; label.text = [NSString stringWithFormat:@"%d", asc]; [actualString release]; break; } } 

由于有人回复了这个问题的评论,我会复活这整个post。

你不应该通过NSData来创build一个你已经拥有的NSString,而你可能正在失去一些东西。 使用stringWithFormat直接转到NSString。 另外,如果你有select的话,ASCII将会返回并且以后再用字节,使用UTF8。

 NSString *actualStringUTF8 = [NSString stringWithFormat:@"%@",[addedresult.text urlEncodeUsingEncoding:NSUTF8StringEncoding]]; NSString *actualStringASCII = [NSString stringWithFormat:@"%@",[addedresult.text urlEncodeUsingEncoding:NSUTF8StringEncoding]]; NSLog(@"%@",actualStringUTF8); NSLog(@"%c",[actualStringUTF8 UTF8String]); //This is a const char* 

其次,我看着SDK,它说symbol.data已经是一个NSString *。 取决于你想要什么,你可能不需要做任何事情。 如果你最终需要改变编码,确保你明白你为什么需要(一个很好的理由是“应用程序的其余部分使用NS **** StringEncoding”)。

还要确保比较string正确的“Objective-C”方式:

 [actualString isEqualToString: testString]; 

NOT actualString == testString;

Interesting Posts