讀檔如何一次讀1byte |
尚未結案
|
alvinken
初階會員 發表:21 回覆:32 積分:45 註冊:2008-06-09 發送簡訊給我 |
因為程式需求,所以讀檔要一次讀1byte來運算<br \>
[code cpp] ifstream InFile(OpenDialog1->FileName.c_str(),ios::binary); InFile.read((char*)TestStruct,sizeof(TestStruct)); [/code] 這個語法一次會4byte讀取,所以想問有沒有一次讀1byte的語法 還是只能用這個語法 再 配合陣列來達到目的 或是有更好的方法來達到,煩請賜教,感激不盡
------
水至清則無魚,人至賤則無敵。 |
daldal
高階會員 發表:6 回覆:102 積分:226 註冊:2007-06-18 發送簡訊給我 |
[code cpp] InFile.read((char*)TestStruct,sizeof(TestStruct)); [/code] 上面的sizeof(TestStruct)就是控制你一次讀多少Byte的地方 可能剛好是你的sizeof(TestStruct)結構==4所以才會一次讀4Byte 若是你要一次讀1Byte 可以直接指定如下 [code cpp] InFile.read((char*)TestStruct,1); [/code]
編輯記錄
daldal 重新編輯於 2008-06-10 13:36:30, 註解 無‧
|
alvinken
初階會員 發表:21 回覆:32 積分:45 註冊:2008-06-09 發送簡訊給我 |
之所以會用 sizeof(TestStruct) 是因為我要將 內容讀進 這個結構裡 <br \>
但不知為啥 sizeof(TestStruct)會等於 4 我以為這樣寫會將資料依照定義好的資料型態丟進 結構裡,還是我的觀念有點錯誤 Struct內容大致於下 [code cpp] Struct TestStruct { char WData[2]; char VData[4]; char WLine[7]; int DData; char PData[2]; char CP[2]; int count; }; [/code] 我的另一個作法是用陣列讀出 再丟進這個結構裡 但是會有點土法練鋼,而且後續會難debug
------
水至清則無魚,人至賤則無敵。 |
daldal
高階會員 發表:6 回覆:102 積分:226 註冊:2007-06-18 發送簡訊給我 |
好像不是要一次讀一個Byte? 而是要一次讀一個結構內容?
如果一次要讀一個結構的話,是直接用sizeof(TestStruct)沒錯 以下是我用TMemoryStream測試的結果 [code cpp] TestStruct ptest; //宣告一個ptest存放資料 ptest.WData[0]=1; ptest.WData[1]=2; ptest.VData[0]=3; ptest.VData[1]=4; ptest.VData[2]=5; ptest.VData[3]=6; ptest.WLine[0]=7; ptest.WLine[1]=8; ptest.WLine[2]=9; ptest.WLine[3]=10; ptest.WLine[4]=11; ptest.WLine[5]=12; ptest.WLine[6]=13; ptest.PData[0]=14; ptest.PData[1]=15; ptest.DData=16; ptest.CP[0]=17; ptest.CP[1]=18; ptest.count=19; TMemoryStream *vcl = new TMemoryStream(); //建立MemoryStream vcl->Write(&ptest,sizeof(ptest)); //ptest內容寫入MemoryStream vcl->Position=0; //位置歸零 TestStruct ptest2; //宣告一個ptest2用來測試取資料 vcl->Read(&ptest2,sizeof(ptest)); //MemoryStream內容讀進ptest2 delete vcl; [/code] 測試的結果,利用中斷去看整個結構,都有寫進去ptest>>>vcl(MemoryStream)>>>ptest2 that's all~ |
alvinken
初階會員 發表:21 回覆:32 積分:45 註冊:2008-06-09 發送簡訊給我 |
|
hdilwy
初階會員 發表:18 回覆:65 積分:41 註冊:2004-08-31 發送簡訊給我 |
|
alvinken
初階會員 發表:21 回覆:32 積分:45 註冊:2008-06-09 發送簡訊給我 |
|
daldal
高階會員 發表:6 回覆:102 積分:226 註冊:2007-06-18 發送簡訊給我 |
|
alvinken
初階會員 發表:21 回覆:32 積分:45 註冊:2008-06-09 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
是阿,為何是 28 呢?
你可以思考 sizeof(char) sizeof(char *) sizeof(char[]) sizeof(char[2]) 差異在哪裡!想一想,馬上說穿答案,就沒意思了 ===================引 用 alvinken 文 章=================== 呵~ sizeof(TestStruct)在程式中的值 就是28,所以強制改28也是一樣的效果 至於另一個方法 我好像也有試過,好像得到很怪的結果 我最後是改用別種寫法啦,只是我還是很想知道為啥這樣定義 就無法將檔案中的值依序準確配置到 Struct的變數裡 |
hdilwy
初階會員 發表:18 回覆:65 積分:41 註冊:2004-08-31 發送簡訊給我 |
sizeof(char) = 1
sizeof(char *) = 4 sizeof(char[]) = ? (想不到) sizeof(char[2]) = 4 (猜的) 這個問題的確很有趣, 不過我有請教我朋友, 他對於為啥不是25而是28, 給了一個很有趣的猜測, 他說如果是1byte alignment來看的話會是我們所慣性思考的25bytes 但是如果是4byte alignment來看的話就會是28bytes 這真是個很有趣的問題 希望能引發熱烈的討論 ===================引 用 syntax 文 章=================== 是阿,為何是 28 呢? 你可以思考 sizeof(char) sizeof(char *) sizeof(char[]) sizeof(char[2]) 差異在哪裡!想一想,馬上說穿答案,就沒意思了 ===================引 用 alvinken 文 章=================== 呵~ sizeof(TestStruct)在程式中的值 就是28,所以強制改28也是一樣的效果 至於另一個方法 我好像也有試過,好像得到很怪的結果 我最後是改用別種寫法啦,只是我還是很想知道為啥這樣定義 就無法將檔案中的值依序準確配置到 Struct的變數裡 |
daldal
高階會員 發表:6 回覆:102 積分:226 註冊:2007-06-18 發送簡訊給我 |
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |