覆盖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 4E
或55 8E
开始的stream…
祝你好运! 我发现你的其他问题帮了很多,所以谢谢。
编辑:一些代码可能会帮助: https : //gist.github.com/johanhar/a421a14bef2f06ee2340
事实certificate,原始的二进制数据确实存在于AVMetadataMachineReadableCodeObject
,可以读入一个NSData对象,但是这个方法有一个问题。
在我的情况下,我试图读取一个阿兹台克人的条码,但它似乎适用于iOS可以检测到的任何东西。 这个答案有解决方法: 用AVFoundation读取二进制QR码