将扫描的条码值解码为整数值
当我扫描条形码,如果它是等于= 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;