覆盖AVMetadataMachineReadableCodeObject的stringValue属性或创build一个替代scheme,输出二进制数据

好吧,我明白了,可能的AVFoundation二元QR码的重复,但我会尝试从不同的angular度来解决这个问题。

我试图扫描条码(在这种情况下,阿兹台克人)在我的swift应用程序。 它适用于具有常规string数据编码的条形码。 对于我的应用程序,我需要能够扫描某种types的条形码( 阅读更多关于这个 ),以二进制格式存储数据。 不幸的是, AVMetadataMachineReadableCodeObject stringValue是(根据苹果的文档 )

该属性的值是根据机器可读代码的格式解码二进制有效负载而创build的NSString

所以输出变得乱码,被截断和不可用(这是一个zlib编码的数据stream)。

我的问题是:有没有办法得到这个二进制有效载荷其他stringValue ? 我可以重写AVMetadataMachineReadableCodeObject一部分,并添加我自己的binaryValue或类似的东西。

我愿意尝试任何东西,但是如果不使用ZXing或者其他库,我会喜欢这个工作,因为这是一个相当紧凑的项目。 如果你知道这是一个图书馆工作,请随时添加评论。

免责声明:我在Swift中编写了这个代码,但是我想我也可以设法从Obj-C代码中抽象出来,如果这是你所知道的。

有了ZXing,我发现了一个解决scheme(这个工作还在进行中,但是我成功的使用了libz来增加内存泄漏)。

+ (int)readCode:(ZXBoolArray *)rawbits startIndex:(int)startIndex length:(int)length创buildunsigned char

所以无论我在哪里find一行代码尝试向NSString添加字符,我也填充了一个unsigned char (从int返回的readCode:rawBits:startIndex:length方法)的readCode:rawBits:startIndex:length

我使用了你发布的关于用PythonparsingDeutche Ban票据的问题中的阿兹特克条形码。 我能够膨胀的内容和一切。 唯一的问题是,膨胀不适用于我的铁路公司…所以我只剩下想出什么样的algorithm,应该膨胀以55 4E55 8E开始的stream…

祝你好运! 我发现你的其他问题帮了很多,所以谢谢。

编辑:一些代码可能会帮助: https : //gist.github.com/johanhar/a421a14bef2f06ee2340

事实certificate,原始的二进制数据确实存在于AVMetadataMachineReadableCodeObject ,可以读入一个NSData对象,但是这个方法有一个问题。

在我的情况下,我试图读取一个阿兹台克人的条码,但它似乎适用于iOS可以检测到的任何东西。 这个答案有解决方法: 用AVFoundation读取二进制QR码