⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ltkchecksumgenerate.cpp

📁 An open source handwriting recongnition package!!!
💻 CPP
📖 第 1 页 / 共 2 页
字号:

	//Caluculate Checksum for the Modiel File Data.
	nCRC = getCRC(modelFileData);

	//Convert the check sum into Hexadecimal Value.
	sprintf(chSum, "%x", nCRC);

	tempHeaderInfo[CKS] = chSum;





	ofstream writeFile(mdtFilePath.c_str(),ios::out|ios::binary); 

	stringStringMap::const_iterator tempHeadInfoIter = tempHeaderInfo.begin();
	stringStringMap::const_iterator tempHeadInfoIterEnd = tempHeaderInfo.end();
	for(; tempHeadInfoIter != tempHeadInfoIterEnd ; ++tempHeadInfoIter)
	{
		if((tempHeadInfoIter->first!=CKS) && (tempHeadInfoIter->first!=HEADERLEN)
			&& (tempHeadInfoIter->first!=DATAOFFSET))
		{
			strHeaderContents2 <<"<"<<tempHeadInfoIter->first
			<<"="<<tempHeadInfoIter->second<<">";
		}
		
	}

	strHeaderContents1<<"<"<<CKS<<"="<<chSum<<">"<<"<"<<HEADERLEN<<"=";


		
	string initialStrHeader = strHeaderContents1.str() + strHeaderContents2.str();

	char strHeaderLength[CKSUM_HDR_STR_LEN], strOffsetLength[CKSUM_HDR_STR_LEN];

	//Get the Length of the header.( 15 is for length of ><DATAOFFSET=> ).
	sprintf(strHeaderLength, "%d", initialStrHeader.length()+14);

	sprintf(strOffsetLength, "%d", initialStrHeader.length()+15);


	//Add the length of the pre Header length and 1 for the last ">" char.
	sprintf(strHeaderLength, "%d", initialStrHeader.length()+strlen(strHeaderLength)+strlen(strOffsetLength)+14);

	sprintf(strOffsetLength, "%d", initialStrHeader.length()+strlen(strHeaderLength)+strlen(strOffsetLength)+15);

	strHeaderContents1<<strHeaderLength<<">";

	strHeaderContents1<<"<"<<DATAOFFSET<<"="<<strOffsetLength<<">";

	writeFile<<strHeaderContents1.str();
	writeFile<<strHeaderContents2.str();

	writeFile.write(modelFileData, modelFileInfoSize);
	
	writeFile.close();

		if( modelFileData != NULL)
		{
			delete [] modelFileData;
			modelFileData = NULL;
		}


	}
	catch (LTKException e)
	{
		LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<"Error : "<<EFILE_OPEN_ERROR<<":"<< e.getExceptionMessage()<<
			"LTKCheckSumGenerate::addHeaderInfo()"<<endl;
		LTKReturnError(EFILE_OPEN_ERROR);
	}
	LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) << 
		 " Exiting: LTKCheckSumGenerate::addHeaderInfo()" << endl;

	return SUCCESS;
}

stringStringMap LTKCheckSumGenerate::updateHeaderWithMandatoryFields(const stringStringMap& headerInfo)
{

	LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) << 
		 " Entering: LTKCheckSumGenerate::updateHeaderWithMandatoryFields()" << endl;

	long testEndian = 1;
	string comment="";
	int commentLen=0;

	stringStringMap tempHeaderInfo = headerInfo;

	if(tempHeaderInfo.find(COMMENT)!=tempHeaderInfo.end())
	{
		
		commentLen=tempHeaderInfo[COMMENT].length();
	}


	// Pushing keys to the tempHeaderInfo
	ostringstream tempString;
    string platformInfoString = "";

    string timeString ;
	m_OSUtilPtr->getSystemTimeString(timeString);
    tempString << timeString;
    
	tempHeaderInfo["CKS"] = "";
	tempHeaderInfo["HEADERLEN"] = "";
	tempHeaderInfo["DATAOFFSET"] = "";
	tempHeaderInfo["CREATETIME"] = tempString.str();
	tempHeaderInfo["MODTIME"] = tempString.str();

    // get Platform Name
    m_OSUtilPtr->getPlatformName(platformInfoString);
    tempHeaderInfo["PLATFORM"] = platformInfoString;

    //get processor architechure
    platformInfoString = "";
    m_OSUtilPtr->getProcessorArchitechure(platformInfoString);
    tempHeaderInfo["PROCESSOR_ARCHITEC"] = platformInfoString;

    // get OS info
    platformInfoString = "";
    m_OSUtilPtr->getOSInfo(platformInfoString);
	tempHeaderInfo["OSVERSION"] = platformInfoString;
	tempHeaderInfo["HEADERVER"] = HEADERVERSION;

    tempString.str("");
    tempString << commentLen;
	tempHeaderInfo["COMMENTLEN"] = tempString.str();

    tempString.str("");
    tempString << sizeof(int);
	tempHeaderInfo["SIZEOFINT"] = tempString.str();

    tempString.str("");
    tempString << sizeof(unsigned int);
	tempHeaderInfo["SIZEOFUINT"] = tempString.str();

    tempString.str("");
    tempString << sizeof(short int);
	tempHeaderInfo["SIZEOFSHORTINT"] = tempString.str();

    tempString.str("");
    tempString << sizeof(float);
	tempHeaderInfo["SIZEOFFLOAT"] = tempString.str();

    tempString.str("");
    tempString << sizeof(char);
	tempHeaderInfo["SIZEOFCHAR"] = tempString.str();

   // checking for indian ness
	if(!(*((char *)(&testEndian))))
	{
		tempHeaderInfo["BYTEORDER"] = "BE";
	}
	else
	{
		tempHeaderInfo["BYTEORDER"] = "LE";
	}
	LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) << 
		 " Exiting: LTKCheckSumGenerate::updateHeaderWithMandatoryFields()" << endl;
	
	return tempHeaderInfo;
}

/****************************************************************************
* AUTHOR		: Vijayakumara M
* DATE			: 26 July 2005
* NAME			: readMDTHeader
* DESCRIPTION	: This function is used to check for checking the file integriry.
* ARGUMENTS		: 
* RETURNS		: 
* NOTES			:
* CHANGE HISTROY
* Author			Date				Description
*****************************************************************************/
int LTKCheckSumGenerate::readMDTHeader(const string &mdtFilePath,
                                             stringStringMap &headerSequence)
{
	LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) << 
		 " Entering: LTKCheckSumGenerate::readMDTHeader()" << endl;

	int headerLen, nCRC;
	
	long dSize, actDataSize;
	
	char chSum[CKSUM_HDR_STR_LEN], *sbuf,*headerData, headerInfo[51];

	stringVector strTokens;

	ifstream mdtFileHandle(mdtFilePath.c_str(), ios::in | ios::binary);	

	if(!mdtFileHandle)
	{
		LOG( LTKLogger::LTK_LOGLEVEL_ERR)  
			<<"Error : "<< EMODEL_DATA_FILE_OPEN <<":"<< getErrorMessage(EMODEL_DATA_FILE_OPEN)
            <<"LTKCheckSumGenerate::readMDTHeader()" <<endl;

		LTKReturnError(EMODEL_DATA_FILE_OPEN);
	}	


	mdtFileHandle.read(headerInfo, 50);

	char *ptr = strstr(headerInfo, HEADERLEN);
	if(ptr == NULL)
	{
		LOG( LTKLogger::LTK_LOGLEVEL_ERR) 
			<<"Error : "<< EMODEL_DATA_FILE_FORMAT <<":"<< getErrorMessage(EMODEL_DATA_FILE_FORMAT)
             <<"LTKCheckSumGenerate::readMDTHeader()" <<endl;

		LTKReturnError(EMODEL_DATA_FILE_FORMAT);
	}

	strtok(ptr, "=");

	char *headerLenPtr = strtok( NULL , ">" );
	
	if(headerLenPtr == NULL)
	{
		LOG( LTKLogger::LTK_LOGLEVEL_ERR)
			<<"Error : "<< EMODEL_DATA_FILE_FORMAT <<":"<< getErrorMessage(EMODEL_DATA_FILE_FORMAT)
			<<"LTKCheckSumGenerate::readMDTHeader()"<<endl;

		LTKReturnError(EMODEL_DATA_FILE_FORMAT);
	}

	headerLen = atoi(headerLenPtr);

	mdtFileHandle.seekg(0, ios::beg);

	headerData = new char [headerLen+1];

	memset(headerData, '\0', headerLen+1);

	mdtFileHandle.read(headerData, headerLen);	

	LTKStringUtil::tokenizeString(headerData,  TOKENIZE_DELIMITER,  strTokens);

	int strTokensSize = strTokens.size();

	for(int indx=0; indx+1 <strTokensSize ;indx=indx+2)
	{
		headerSequence[strTokens.at(indx)] = strTokens.at(indx+1);	
	}

	// get the file size in bytes
	mdtFileHandle.seekg(0,ios::beg);
	mdtFileHandle.seekg(0, ios::end);
	dSize = mdtFileHandle.tellg();

	//Size fo the actual data excluding Header size.
	actDataSize=dSize-headerLen+1;

	string cks = headerSequence[CKS];

	//Allocate memory to read the actual data.
	sbuf = new char[actDataSize];
	memset(sbuf, '\0', actDataSize);
	
	//Read the file.
	mdtFileHandle.seekg(headerLen, ios::beg);
	mdtFileHandle.read(sbuf, actDataSize);

	//Close the file.	
	mdtFileHandle.close();

	//Caluculate Checksum for the Model File Data.
	nCRC = getCRC(sbuf);
	sprintf(chSum, "%x", nCRC);

	delete [] sbuf;
	delete [] headerData;

	if(strcmp(cks.c_str(), chSum) != 0)
	{
		LOG( LTKLogger::LTK_LOGLEVEL_ERR)
			<<"Error : "<< EINVALID_INPUT_FORMAT <<":"<< getErrorMessage(EINVALID_INPUT_FORMAT)
			<<"LTKCheckSumGenerate::readMDTHeade()r"<<endl;
		LTKReturnError(EINVALID_INPUT_FORMAT);
	}
	LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) << 
		 " Exiting: LTKCheckSumGenerate::readMDTHeader()" << endl;

	return SUCCESS;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -