将扫描的条形码值解码为int值

时间:2012-04-20 10:16:58

标签: ios nsstring barcode-scanner unsigned-integer zbar-sdk

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

但扫描条形码具有整数值 - 使用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;
    }

}

1 个答案:

答案 0 :(得分:0)

由于有人重新提出了这个问题的评论,我将恢复整篇文章。

你不应该通过NSData从你已经拥有的东西中创建一个NSString,并且你可能在此过程中丢失了一些东西。使用stringWithFormat直接转到NSString。此外,如果您有选择,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")。

还要确保比较正确的字符串" Objective-C"方式:

[actualString isEqualToString: testString];

NOT actualString == testString;