全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1578
推到 Plurk!
推到 Facebook!

請問這段程式碼是做甚麼用的?

答題得分者是:keikojason
juliuschen00
一般會員


發表:4
回覆:6
積分:2
註冊:2007-08-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-04-15 11:08:37 IP:59.125.xxx.xxx 訂閱
請問各位前輩 : 
公司有人交接了一段 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 寫到該檔案後面.


不知對不對 ?

感謝!!
編輯記錄
juliuschen00 重新編輯於 2008-04-15 11:10:20, 註解 無‧
juliuschen00 重新編輯於 2008-04-15 11:19:25, 註解 無‧
keikojason
初階會員


發表:37
回覆:63
積分:45
註冊:2004-05-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-04-15 11:30:07 IP:61.219.xxx.xxx 訂閱

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;寫入完成
}


這是大約的意思~~希望對你有幫助
各位大大~如果小弟有說錯~~請大力指證~~
互相學習~~

祝你順心~~~
編輯記錄
keikojason 重新編輯於 2008-04-15 11:52:06, 註解 無‧
keikojason 重新編輯於 2008-04-15 11:54:06, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-04-15 16:12:40 IP:163.28.xxx.xxx 訂閱

[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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-04-15 16:30:25 IP:59.125.xxx.xxx 訂閱
感謝!!
我比較有疑問的地方是

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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-04-15 16:50:47 IP:163.28.xxx.xxx 訂閱
因為可能是加密的功能, 所以這兩行, 沒有什麼理論, 純粹就是想這麼做而已.
當然讀取這個檔案的程式必須要知道這個演算法.
------
FPGA驗證, FPGA開發平台, http://smims.com
brook
資深會員


發表:57
回覆:323
積分:371
註冊:2002-07-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-04-16 07:31:38 IP:118.168.xxx.xxx 訂閱
簡單的加密而己.
系統時間:2024-04-24 7:38:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!