-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
unsigned char myKey[2];
myKey[0]=1;
myKey[1]=2;
if(metadataObjects == nil || [metadataObjects count] ==0)
{
qrCodeFrameView.frame=CGRectZero;
}
if (metadataObjects != nil && [metadataObjects count] > 0) {
AVMetadataMachineReadableCodeObject *metadataObj = [metadataObjects objectAtIndex:0];
if ([[metadataObj type] isEqualToString:AVMetadataObjectTypeQRCode]) {
Encoder *encoder=[[Encoder alloc] init];
NSLog(@"0000-----%@",[metadataObj stringValue]);
unsigned char buffer_to_decrypt=[metadataObj stringValue];
[encoder tripledes_decrypt:buffer_to_decrypt lenght:sizeof(buffer_to_decrypt) key:myKey];
NSData *data = [NSData dataWithBytes:buffer_to_decrypt length:sizeof(buffer_to_decrypt)];
NSLog(@"data = %@", data);
NSString *result=[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"-----<<<<result>>>>%@",result);
AVMetadataMachineReadableCodeObject *barCodeObj=(AVMetadataMachineReadableCodeObject *)[_videoPreviewLayer transformedMetadataObjectForMetadataObject:metadataObj];
qrCodeFrameView.frame=barCodeObj.bounds;
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
[self stopReading];
_isReading = NO;
}
}}
在这里,我可以阅读正常的QR码。但是当从QR码读取ASCII字符时,[metadataObj stringValue]返回nil。我使用它来加密QR码中的数据,以便只有我的应用程序可以读取我的QR码。如何读取ASCII字符? 这是我加密的QR码QR Code image
答案 0 :(得分:1)
Apple的SDK只能使用UTF8编码进行转换,这并不让我感到惊讶。
在旧iTunes上下载应用程序并进行探索后,我发现ZXingObjc
和ZBarSDK
的引用我想用来读取QRCode,这可以解释为什么应用程序可以读取它你的不能。
所以你可以使用这些第三方库,或者如果你想继续使用Apple的那个,这是一个可能的解决方案:
NSString <=> EncryptedString <=> Base64EncryptedString <=> QRCode
或者等待Apple提供而不只是[metadataObj stringValue]
,[metadataObj stringValueUsingEncoding:]
或[metadataObj rawData]
(您可以在使用[[NSString alloc] initWithData:[metadataObj rawData] encoding:NSASCIIEncoding]
后)。