我正在將二進制數據讀入結構中,該結構正常工作。下面是代碼:如何在結構中使用字符串而不是char數組來讀取二進制數據
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct TaqIdx {
char symbol[10];
int tdate;
int begrec;
int endrec;
}__attribute__((packed));
int main()
{
ifstream fin("T201010A.IDX", ios::in | ios::binary);
if(!fin) {
cout << "Cannot open file." << endl;
return 1;
}
int cnt = 0;
TaqIdx idx;
while(fin.read((char *) &idx,sizeof(idx))) {
if(!fin.good()) {
cout << "A file error occurred." << endl;
return 1;
}
idx.symbol[10] = '\0';
cout << "(" << idx.symbol << ", " << idx.tdate << ", "
<< idx.begrec << ", " << idx.endrec << ") "
<< cnt++ << endl;
}
fin.close();
return 0;
}
輸出的前幾行如下:
(A , 20100864, 1, 35981) 0
(AA , 20100864, 35982, 89091) 1
(AAPR , 20100864, 89092, 89093) 2
(AACC , 20100864, 89094, 89293) 3
(AADR , 20100864, 89294, 89301) 4
(AAI , 20100864, 89302, 99242) 5
(AAME , 20100864, 99243, 99252) 6
(AAN , 20100864, 99253, 102275) 7
(AANA , 20100864, 102276, 102280) 8
(AAON , 20100864, 102281, 102592) 9
我的問題是:是否有可能取代C風格字符陣列中與所述結構C++字符串?如果是這樣,你能提供一個我將如何做的例子。非常感謝!
經過一番努力。如果你知道這個結構有精確的字節佈局,並且你知道它不會改變,你現在的方法似乎是最優的(至少與引入不必要的抽象相比)。 – 2011-04-07 23:40:35
編程決策圖出現在腦海裏:「它工作嗎?=>不要用它***」:-) – pajton 2011-04-07 23:45:28
@Tomalak和@pajton,非常好的一點。額外的努力可能不值得我花時間。謝謝。 – TJB 2011-04-07 23:48:51