我有一个大问题。我看了一些帖子,无法解决这个问题。 我有一个Iphone应用程序,这个应用程序读取zxing的QR码,但QR有一个个人加密。当ZXing解析这个字节并转换为NSString时,字节改变,我无法得到原始字节。
我正在阅读Decoder.mm和许多其他类的ZXing库,我无法得到它。
有什么想法吗?
由于
答案 0 :(得分:1)
不幸的是,ZXWidgetController
和Decoder
类没有设置为简化和重构它们以使它更容易,因为它们最初的设计方式本身并不是最简单的。< / 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_);