【问题标题】:Decoding the scanned barcode value to int value将扫描的条形码值解码为 int 值
【发布时间】:2012-04-20 10:16:57
【问题描述】:

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

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

}

【问题讨论】:

  • 你试过NSUTF8StringEncoding吗?
  • 我试过了,即使它显示相同的值...如果它是 NSUTF8Encoding 它甚至不会显示特殊字符..请帮助!!!
  • 找到解决方案了吗?

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


【解决方案1】:

既然有人恢复了这个问题的 cmets,我将恢复整个帖子。

你不应该通过 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];

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 2016-09-16
    • 1970-01-01
    相关资源
    最近更新 更多