1

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

但是扫描条码是整数值——当使用NSASCII它解码时,它只显示直到值127,之后它显示无效结果。例如:如果我的条形码值 =9699结果值 =jem那么我添加的结果值 =jem= 实际字符串值 = 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;
    }

}
4

1 回答 1

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];

不是实际字符串 == 测试字符串;

于 2015-01-12T22:48:44.630 回答