Как получить сырые байты от ZXing - IPhone - PullRequest
1 голос
/ 23 января 2012

У меня большая проблема. Я прочитал какой-то пост и не могу решить эту проблему. У меня есть приложение для Iphone, это приложение считывает QR-код с ZXING, но QR-код имеет личное шифрование. Когда ZXing анализирует эти байты и преобразует их в NSString, байты меняются, и я не могу получить байты оригиналов.

Я читал Decoder.mm и многие другие классы библиотеки ZXing, и я не могу этого получить.

Есть идеи?

Спасибо

Ответы [ 3 ]

1 голос
/ 01 февраля 2012

Хорошо ... я отвечу на свой вопрос.То, что вы сказали, верно, ZXingWidgetController считает, что возвращенный указатель char находится в UTF8, и создает строку с этими байтами.Что я сделал?Мне нужно шестнадцатеричное значение каждого байта в строке, поэтому, если значение шестнадцатеричного числа символа 68 равно 0x57, я создал строку, объединяющую 57 | 45 | 25 | a7 | 7e ...... я конвертирую значение шестнадцатеричного числа вформат строки ... тогда я разбираю эту строку ... не очень хорошее решение, но это только то, что я могу сделать в этот момент.

1 голос
/ 29 мая 2012

Для тех, кто хочет знать, как это сделать:

У меня была такая же проблема (получение необработанных байтов из 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_);
1 голос
/ 24 января 2012

К сожалению, классы ZXWidgetController и Decoder не созданы для того, чтобы упростить это, и рефакторинг их для упрощения сам по себе не самая легкая вещь из-за того, как они изначально были спроектированы.

Если вы хотите попробовать что-то исправить, вам просто нужно перейти в класс Decoder и изменить его, чтобы получить результаты байтов вместо текстовых результатов в методе - decode.

Естьнекоторые классы в каталоге objc, которые могут упростить эту конкретную часть, но они находятся на более низком уровне (они находятся на уровне CALayer, а не на уровне контроллера UIKit).И у них не так много документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...