ios - 覆盖 AVMetadataMachineReadableCodeObject 的 stringValue 属性或创建输出二进制数据的替代方法

标签 ios objective-c swift binary barcode

好的,我明白了,Read binary QR Code with AVFoundation 可能重复但我会尝试从不同的角度解决这个问题。

我正在尝试在我的 swift 应用程序中扫描条形码(在本例中为 Aztec)。它适用于编码了常规字符串数据的条形码。不过,对于我的应用程序,我需要能够扫描以二进制格式存储数据的某种类型的条形码 ( read more about this on SO )。 遗憾的是,AVMetadataMachineReadableCodeObjectstringValue 是(根据 Apple's docs )

The value of this property is an NSString created by decoding the binary payload according to the format of the machine-readable code

所以输出会出现乱码、截断和不可用(这是一个 zlib 编码的数据流)。

我的问题是:除了 stringValue 之外,还有什么方法可以获取这个二进制负载?我可以覆盖 AVMetadataMachineReadableCodeObject 的一部分并添加我自己的 binaryValue 或类似的东西吗?

我愿意尝试任何事情,但我希望它能在本地工作而不用求助于 ZXing 或其他一些库,因为这是一个非常紧凑的项目。如果您知道这与库一起使用,请随时添加评论。

免责声明:我正在用 Swift 编写代码,但我想我也可以设法从 Obj-C 代码中抽象出来,如果您知道的话。

最佳答案

通过 ZXing,我找到了一个解决方案(该解决方案仍在进行中,但我设法使用 libz 成功地膨胀了缩减的内容)。

转到 ZXAztecDecoder.m并在方法中 + (NSString *)encodedData:(ZXBoolArray *)correctedBits您可以使用 + (int)readCode:(ZXBoolArray *)rawbits startIndex:(int)startIndex length:(int)length 给出的代码创建unsigned char .

所以无论我在哪里找到一行代码,试图将字符添加到 NSString我还填充了 unsigned char 的缓冲区(从 int 转换为 readCode:rawBits:startIndex:length 方法)。

我使用了您发布的有关使用 Python 解析 Deutche Ban 门票的问题中的 Aztec 条形码。我能够膨胀内容和一切。唯一的问题是膨胀对我的铁路公司不起作用......所以我只能弄清楚应该用哪种算法来膨胀以 55 4E 开头的流。或 55 8E ...

祝你好运!我发现你的其他问题很有帮助,非常感谢。

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

关于ios - 覆盖 AVMetadataMachineReadableCodeObject 的 stringValue 属性或创建输出二进制数据的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34438301/

相关文章:

objective-c - 是否可以有 "implementation-only"类(class)成员?

ios - SKVideoNode 停止 SKAudioNode 播放

iphone - 核心数据内存泄漏

ios - iOS MDM 中的配置

iphone - 在 ios 5 的 MP 音乐播放器 Controller 中获得错误的播放状态

ios - 在一个 View Controller 上具有静态单元格和动态 TableView 的 TableView

ios - iPhone 无法通过 WiFi 连接到本地 HTTP 服务器

objective-c - 为什么 UIBarButtonItem 在设置为 UITextField 的 inputAccessoryView 的 UIToolbar 中没有获得点击?

ios - 在 UIView 中自动播放本地视频

swift - UIPopoverController 的正确代码是什么