// clip.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" typedef unsigned char byte; #include <iostream> using namespace std; #define TRUE 1 #define FALSE 0 void encry_clip_encode(byte* data, const byte* raw, const int len) { *data = 0xc0; for (int i = 0; i < len; i++) { if (*raw == 0xc0) { *data++ = 0xdb; *data++ = 0xdc; } else if (*raw == 0xdb) { *data++ = 0xdb; *data++ = 0xdd; } else *data++ = *raw; raw++; } // } void encry_clip_decode(byte* raw, const byte* data, int len) { bool tag = FALSE; for (int i = 0; i < len; ) { if (*data == 0xdb) { tag = TRUE; data++; } else if (*data == 0xdc && tag) { *raw++ = 0xc0; tag = FALSE; i++; *data++; } else if (*data == 0xdd && tag) { *raw++ = 0xdb; tag = FALSE; i++; data++; } else { if (tag) { *raw++ = *(data-1); i++; } *raw++ = *data++; tag = FALSE; i++; } } } void print(byte* b) { while (*b != 0) { if (*b >= '0' && *b <= 'z') cout << *b << "_"; cout << hex << (int)*b++ << " "; } cout << endl; } int _tmain(int argc, _TCHAR* argv[]) { byte aaa[20] = "abcdef/xc0ghi/xdbjk"; byte bbb[20] = {0}; print(aaa); memset(bbb, 0, sizeof bbb); encry_clip_encode(bbb, aaa, 15); print(bbb); print(aaa); memset(aaa, 0, sizeof aaa); encry_clip_decode(aaa, bbb, 15); print(aaa); cout << aaa << endl; cout << dec << (int)aaa[6] << endl; return 0; }