相关疑难解决方法(0)

通过AVMetadataMachineReadableCodeObject从Aztec条形码读取原始字节会产生意外结果

我一直在研究iOS阅读器应用程序,用于德国铁路(德国铁路)使用的特殊条形码.它是Aztec条形码的变体,用于连接DSA签名字符串和zlib缩减的有效负载.

我被困住了,当我得知AVMetadataMachineReadableCodeObject没有公共方法来读取条形码中包含的原始字节时,字符串方法总是使zlib压缩数据乱码.

幸运的是,这个答案让我朝着正确的方向前进.可以使用KVO访问(私有)字节,因为我目前不希望在App Store上分发应用程序,这是完美的.

尽管我几乎不存在SwiftObjective-C知识,我设法让这个工作,你可以在示例代码中看到.但是条形码中存储的字节NSData与预期结果不符!我怀疑我使用的zlib库(DeflateSwift)无法正常工作,所以我构建了一个测试用例,工作正常.

我的问题是:我做错了什么?我是否需要进一步处理原始字节以获得预期结果(见下文)?如何究竟是存储在字节AVMetadataMachineReadableCodeObject?谁能指出我正确的方向?任何帮助表示赞赏.

这是我的代码(这是一个悲伤的mashup SwiftObjective-C)

if let metadataObject = metadataObjects.first {
    let readableObject = metadataObject as! AVMetadataMachineReadableCodeObject;
    let rawReadableObject = readableObject.valueForKeyPath("_internal.basicDescriptor")!["BarcodeRawData"] as? NSData;

    if let rawBytes = rawReadableObject {
       let barcodeData = rawBytes; // or use testData instead

        let barcodeSplit:Int = 68;
        let barcodeLength:Int = barcodeData.length;
        let barcodeHeader:NSData = barcodeData.subdataWithRange(NSRange(location: 0, length: barcodeSplit))
        let barcodeZlibContent:NSData = barcodeData.subdataWithRange(NSRange(location: barcodeSplit, …
Run Code Online (Sandbox Code Playgroud)

zlib objective-c ios aztec-barcode swift

12
推荐指数
1
解决办法
2066
查看次数

标签 统计

aztec-barcode ×1

ios ×1

objective-c ×1

swift ×1

zlib ×1