当我扫描条形码时,如果等于= 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;
}
}
答案 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;