int save2log(u1 *origin, int olen, u1 *buff) { u1 head[6] = { 0x53, 0x41, 0x56, 0x45, 0x20 }; u1 tail[3] = { 0x0D, 0x0A }; u1 chartype; int offset = 0; int i = 0; int j = 0; int len = 0; int sflag = 0; int eflag = 0; for (i = 0; i < olen; i++) { chartype = ASCIICodeDetect(origin[i]); if (chartype == SMALL_LETTER) { origin[i] -= LETTER_DIST; chartype = BIG_LETTER; } } for (i = 0; i < olen; i++) { if (!memcmp(origin + i, head, 5) && (i+5 < olen)) { sflag = i; while (1) { if (origin[sflag] == 0x0D && origin[sflag + 1] == 0x0A) { eflag = sflag + 1; break; } if (sflag > olen) break; sflag++; } len = eflag - i - 1 - 5; memcpy(buff + offset, "LOG ", 4); offset += 4; memcpy(buff + offset, origin+ i + 5, len); offset += len; memcpy(buff + offset, " SAVE", 5); offset += 5; memcpy(buff + offset, tail, 2); offset += 2; i = eflag; } else { buff[offset] = origin[i]; offset += 1; } } return offset; }
舉例:code
如:log gpgga ontime 1class
save gpggp ontime 1im
unlogallchart
fix autowhile
四行指令都能識別co
此代碼功能是把save gpgga ontime 1識別出來並修改成log gpgga ontime 1 savetime