請問這段程式碼是做甚麼用的? |
答題得分者是:keikojason
|
juliuschen00
一般會員 發表:4 回覆:6 積分:2 註冊:2007-08-17 發送簡訊給我 |
請問各位前輩 :
公司有人交接了一段 Source, 因為對C不是很熟,看了之後有些地方不是很清楚, 想請教各位前輩... [code cpp] int AddSign(char *pcFileName) { if(pcFileName == NULL) return e_Param; FILE *fp = fopen(pcFileName, "a b"); if(fp == NULL) { return e_OpenFile; } char *pcBuf; pcBuf = new char[256]; if(pcBuf == NULL) { fclose(fp); return e_Memory; } int iNameLen = strlen(pcFileName); if(iNameLen > 247) { fclose(fp); delete pcBuf; return e_Param; } strcpy(pcBuf 8, pcFileName); iNameLen = 8; pcBuf[iNameLen]=0; iNameLen = 1; for(unsigned char xi = iNameLen; xi<255; xi ) { pcBuf[xi] = xi-255; } for(xi = 0; xi < 250; xi ) { pcBuf[xi] ^= 0xA5; } if(fwrite(pcBuf, 1, 256, fp) != 256) { delete pcBuf; fclose(fp); return e_WriteFile; } delete pcBuf; fclose(fp); return 0; } [/code] 我猜測一下大意,不知對不對 .... 1. if filename = null return -1 2. open file, open error return -2 3. create PcBuf 長度 256 4. 判斷檔名長度 , 大於 247 then close file. 5. 將檔名的字串置於 PcBuf 第8個位置開始, 6. PcBuf 在放完檔名後,放一個 "0" . 7. 接下來兩段就不知作甚麼了................ 8. 將長為256 Byte 的 PcBuf 寫到該檔案後面. 不知對不對 ? 感謝!! 編輯記錄
|
keikojason
初階會員 發表:37 回覆:63 積分:45 註冊:2004-05-10 發送簡訊給我 |
int AddSign(char *pcFileName) { if(pcFileName == NULL) <==檢查要寫入的檔案是否存在 return e_Param; <==如果沒有存在他會出現警告字串e_Param,要看他設定什麼囉 FILE *fp = fopen(pcFileName, "a b"); <==建構一個FILE型態 開啟pcFileName,至於"a b"沒有記錯好像是fopen開啟的參數 if(fp == NULL) <===如果沒有存在他會出現警告字串e_OpenFile,應該開啟失敗等等 { return e_OpenFile; } char *pcBuf; pcBuf = new char[256]; <==給接下來要寫檔時候要的Buffer 256 if(pcBuf == NULL) <==如果Bufferr建構失敗空的 { fclose(fp); <==一開始fopen()過的要先關閉,如果每開一次沒有試放他會一只暫用記憶體 return e_Memory; <==回傳訊息,因該是有關記憶體建構失敗等等訊息 } int iNameLen = strlen(pcFileName); <==計算書要寫入的長度 if(iNameLen > 247) <==如果大於247就不是要寫的pcFileName { fclose(fp); <==一開始fopen()過的要先關閉 delete pcBuf; <==將先前建構的Bufferr刪除歸還回去 return e_Param; <==回傳訊息,因該是有關FileName失敗等等訊息 } strcpy(pcBuf 8, pcFileName); 以上都是做一些寫入的前置除錯作業避免作不正常的操作,這才是正正要對檔案寫入 strcpy將 iNameLen = 8; pcFileName內容整個複製到pcBuf 8中 pcBuf[iNameLen]=0; iNameLen = 1; for(unsigned char xi = iNameLen; xi<255; xi ) { pcBuf[xi] = xi-255; } for(xi = 0; xi < 250; xi ) { pcBuf[xi] ^= 0xA5; } if(fwrite(pcBuf, 1, 256, fp) != 256) <==http://linux.tnc.edu.tw/techdoc/banic/filesystem/fwrite.html { delete pcBuf; fclose(fp); return e_WriteFile; } delete pcBuf; <===上面寫入完成後將Bufferr刪除歸還回去 fclose(fp); <====始fopen(fp)過的要先關閉 return 0; <==== return 0;寫入完成 } 這是大約的意思~~希望對你有幫助 各位大大~如果小弟有說錯~~請大力指證~~ 互相學習~~ 祝你順心~~~
編輯記錄
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
[code cpp] strcpy(pcBuf 8, pcFileName); //將檔名放在pcBuf 8的位置, 所以會空出8個char無資料. iNameLen = 8; //目前buffer裡面的資料長度 pcBuf[iNameLen]=0; //設定字串結尾 iNameLen = 1; //pcBuf中字串結尾後的起始位置 for(unsigned char xi = iNameLen; xi<255; xi ) { pcBuf[xi] = xi-255; //在字串結尾後的buffer填上數字 } for(xi = 0; xi < 250; xi ) { pcBuf[xi] ^= 0xA5; //將pcBuf內容做XOR } if(fwrite(pcBuf, 1, 256, fp) != 256) { delete pcBuf; fclose(fp); return e_WriteFile; } [/code] 感覺是要將檔案內容加密, 當然是一個簡單的演算法.
------
FPGA驗證, FPGA開發平台, http://smims.com |
juliuschen00
一般會員 發表:4 回覆:6 積分:2 註冊:2007-08-17 發送簡訊給我 |
感謝!!
我比較有疑問的地方是 pcBuf[xi] = xi-255; //在字串結尾後的buffer填上數字 pcBuf[xi] ^= 0xA5; //將pcBuf內容做XOR 這兩行,因為沒用過類似的case ,所以想像不出他作甚麼用....... 不知前輩可以再說明一下嗎? 非常感謝!! ===================引 用 ikk 文 章=================== [code cpp] strcpy(pcBuf 8, pcFileName); //將檔名放在pcBuf 8的位置, 所以會空出8個char無資料. iNameLen = 8; //目前buffer裡面的資料長度 pcBuf[iNameLen]=0; //設定字串結尾 iNameLen = 1; //pcBuf中字串結尾後的起始位置 for(unsigned char xi = iNameLen; xi<255; xi ) { pcBuf[xi] = xi-255; //在字串結尾後的buffer填上數字 } for(xi = 0; xi < 250; xi ) { pcBuf[xi] ^= 0xA5; //將pcBuf內容做XOR } if(fwrite(pcBuf, 1, 256, fp) != 256) { delete pcBuf; fclose(fp); return e_WriteFile; } [/code] 感覺是要將檔案內容加密, 當然是一個簡單的演算法. |
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |