//限制在0…256,strData最多为2个字符 unsigned char CString2DataType::Str2HEX(CString strData) { int t,t1; strData.Replace(" ",""); //不能含空格 int rlen=0,len=strData.GetLength(); if(len>2) strData=strData.Left(2); if(len==1) strData="0"+strData; char h=strData[0]; char l=strData[1]; t=HexChar(h); t1=HexChar(l); if((t==16)||(t1==16)) return 0; t=t*16+t1; return t; }
bool OnSingleLine(LPCSTR line) { //Parse single line wgFile_s fileStatus; // file/dir type fileStatus.nFlags = 0; if (*line == 'D') fileStatus.nFlags |= WGFF_Directory; else if (*line != 'F') // parse error return false; line += 2; // status fileStatus.nStatus = WGFS_Unknown; switch (*line) { case 'N': fileStatus.nStatus = WGFS_Normal; break; case 'M': fileStatus.nStatus = WGFS_Modified; break; case 'S': fileStatus.nStatus = WGFS_Staged; break; case 'A': fileStatus.nStatus = WGFS_Added; break; case 'C': fileStatus.nStatus = WGFS_Conflicted; break; case 'D': fileStatus.nStatus = WGFS_Deleted; break; case 'I': fileStatus.nStatus = WGFS_Ignored; break; case 'U': fileStatus.nStatus = WGFS_Unversioned; break; case 'E': fileStatus.nStatus = WGFS_Empty; break; case '?': fileStatus.nStatus = WGFS_Unknown; break; default: // parse error return false; } line += 2; // file sha1 BYTE sha1[20]; fileStatus.sha1 = NULL; if ( !(fileStatus.nFlags & WGFF_Directory) ) { for (int i=0; i<20; i++) { sha1[i] = (BYTE)((HexChar(line[0]) << 8) | HexChar(line[1])); line += 2; } line++; } // filename int len = strlen(line); if (len && len < 2048) { WCHAR *buf = (WCHAR*)alloca((len*4+2)*sizeof(WCHAR)); *buf = 0; MultiByteToWideChar(CP_ACP, 0, line, len+1, buf, len*4+1); fileStatus.sFileName = buf; if (*buf && (*m_pEnumCb)(&fileStatus,m_pUserData)) return false; } return true; }