如何从ZXing-IPhone获取原始字节

时间:2012-01-23 19:26:53

标签: iphone ios xcode barcode zxing

我有一个大问题。我看了一些帖子,无法解决这个问题。 我有一个Iphone应用程序,这个应用程序读取zxing的QR码,但QR有一个个人加密。当ZXing解析这个字节并转换为NSString时,字节改变,我无法得到原始字节。

我正在阅读Decoder.mm和许多其他类的ZXing库,我无法得到它。

有什么想法吗?

由于

3 个答案:

答案 0 :(得分:1)

不幸的是,ZXWidgetControllerDecoder类没有设置为简化和重构它们以使它更容易,因为它们最初的设计方式本身并不是最简单的。< / p>

如果你想尝试补丁,你只需要进入Decoder类并修改它以获取字节结果而不是- decode方法中的文本结果。

objc目录中有一些类可能会使这个特定部分更容易,但它们处于较低级别(它们位于CALayer级别而不是UIKit控制器水平)。他们没有太多文件。

答案 1 :(得分:1)

好的......我会回答我自己的问题。你所说的是真的,ZXingWidgetController认为返回的char指针是UTF8并用这个字节组成一个字符串。我做了什么?我需要字符串中每个字节的十六进制值,所以如果char 68的hexa值是0x57,我做了一个字符串连接57 | 45 | 25 | a7 | 7e ......我将hexa值转换成字符串格式...然后我解析该字符串...不是一个很好的解决方案,但只是我在这个时刻可以做的。

答案 2 :(得分:1)

对于任何想要知道的人,如何做到这一点:

我遇到了同样的问题(从qr代码获取原始字节):

我“修复”了DecodedBitStreamParser.cpp和函数

void DecodedBitStreamParser :: decodeByteSegment(..)获取十六进制字符串,例如ab0cd42 ...

我替换了函数末尾的行:

append(result, readBytes, nBytes, encoding);

使用:

try {
    char buffer [nBytes * 2];
    for (int i = 0; i < nBytes; i++) {
        std::sprintf(buffer, "%s%02x", buffer, readBytes[i]);
    }
    append(result, (unsigned char*)buffer, nBytes * 2, encoding.c_str());
} catch (ReaderException const& re) {
    throw FormatException();
}
byteSegments->values().push_back(bytes_);