struct data { u_short sin_port; structin_addr sin_addr; unsigned char id; };struct data Data[141];char *buf,*buf1, buf1 = (char *)malloc(10000); memset(buf1, 0, 10000);for (i =0;i< 141;i++){ memcpy(buf1, &Data[i].id,20); printf("buf11: %x", buf1); buf1+=20; memcpy(buf1, &Data[i].sin_addr, 4); buf1+=4; memcpy(buf1, &Data[i].sin_port, 2); buf1+=2; size1 += 26;}buf1 -= size1; write(fd2, buf1, size1+1); close(fd2); free(buf1);
我發(fā)現(xiàn)這樣寫入的數(shù)據(jù)總是不對(duì)/?請(qǐng)教哪里有問題???一般都是先寫入buffer,再寫入文件?
不要這么麻煩。你頂一個(gè)struct的指針,指向"buf指針強(qiáng)轉(zhuǎn)型后的位置",然后將你要copy的struct賦值過(guò)來(lái)即可。char* buf = new char[100];struct Data d1; // init d1struct Data d2 = (struct Data)buf;*d2 = d1;
這是buf空間的前對(duì)應(yīng)字節(jié)空間即存儲(chǔ)了d1的值
buf1是字符串類型,應(yīng)該有結(jié)束符‘0’來(lái)收尾,否則會(huì)有亂碼。
賦值前先初始化 buf = buf1 保存數(shù)據(jù)起始位置最后使用buf而不是buf1寫入數(shù)據(jù) write(fd2, buf, size1+1);buf1 -= size1 也是多余處理
1.標(biāo)題“過(guò)于結(jié)構(gòu)體” , 應(yīng)該是“對(duì)于結(jié)構(gòu)體”2.“char buf, buf1,” , 最好用西文分號(hào)結(jié)束。3.內(nèi)存拷貝memcpy的具體含義參考下標(biāo)準(zhǔn)手冊(cè),按你的意思,應(yīng)該是這個(gè)函數(shù)第三個(gè)參數(shù)問題。
……