bool frame::checksumIsValid() const { //mengembalikan true bila checksum benar assert(formatIsValid()); unsigned int STXpos=5; unsigned int ETXpos; for (ETXpos=STXpos; bytes[ETXpos]!=ETX; ETXpos++) {} return checkChecksum(getChecksum(),bytes.substr(0,ETXpos+1)); }
void KCartridge::load(const std::string & filename) { loadFile(filename); if(size() < sizeof(header_t)) { if(size() > 0) { delete[] rom; rom = nullptr; rom_size = 0; } throw std::runtime_error("Cart: File corrupted."); } /* Checke header-struct packing... */ assert(header().checksum == (*this)[0x014D]); lg::info(TAG, "Loaded Cartridge %s\n", std::string(header().title, 0x0F).c_str()); lg::info(TAG, "Loaded Cartridge size: %u\n", size()); lg::debug(TAG, "Cartridge Type: %u\n", header().cart_type); /* Überprüfe die header-checksum */ checkChecksum(); }
Ref<Result> UPCEANReader::decodeRow(int rowNumber, Ref<BitArray> row, int startGuardRange[]){ std::string tmpResultString; std::string& tmpResultStringRef = tmpResultString; int endStart; try { endStart = decodeMiddle(row, startGuardRange, 2 /*reference findGuardPattern*/ , tmpResultStringRef); } catch (ReaderException re) { if (startGuardRange!=NULL) { delete [] startGuardRange; startGuardRange = NULL; } throw re; } int* endRange = decodeEnd(row, endStart); #pragma mark QuietZone needs some change // Make sure there is a quiet zone at least as big as the end pattern after the barcode. The // spec might want more whitespace, but in practice this is the maximum we can count on. // int end = endRange[1]; // int quietEnd = end + (end - endRange[0]); // if (quietEnd >= row->getSize() || !row->isRange(end, quietEnd, false)) { // throw ReaderException("Quiet zone asserrt fail."); // } if (!checkChecksum(tmpResultString)) { if (startGuardRange!=NULL) { delete [] startGuardRange; startGuardRange = NULL; } if (endRange!=NULL) { delete [] endRange; endRange = NULL; } throw ReaderException("Checksum fail."); } Ref<String> resultString(new String(tmpResultString)); float left = (float) (startGuardRange[1] + startGuardRange[0]) / 2.0f; float right = (float) (endRange[1] + endRange[0]) / 2.0f; std::vector< Ref<ResultPoint> > resultPoints(2); Ref<OneDResultPoint> resultPoint1(new OneDResultPoint(left, (float) rowNumber)); Ref<OneDResultPoint> resultPoint2(new OneDResultPoint(right, (float) rowNumber)); resultPoints[0] = resultPoint1; resultPoints[1] = resultPoint2; ArrayRef<unsigned char> resultBytes(1); if (startGuardRange!=NULL) { delete [] startGuardRange; startGuardRange = NULL; } if (endRange!=NULL) { delete [] endRange; endRange = NULL; } Ref<Result> res(new Result(resultString, resultBytes, resultPoints, getBarcodeFormat())); return res; }