【发布时间】:2015-07-17 08:28:15
【问题描述】:
我需要一些帮助,我必须为学校创建一个程序。我不确切知道如何从 bin 文件中读取和操作数据。 bin文件是TCP头的形式,我需要:
- 将二进制文件读入结构并打印标题。
- 创建响应标头并将其写入新文件。
- 读取响应二进制文件并打印标题。
这是我目前所拥有的:
struct tcp
{
unsigned char sourceport[2];
unsigned char destination[2];
unsigned char sequence[4];
unsigned char ackno[4];
unsigned char other[2];
unsigned char window[2];
unsigned char checksum[2];
unsigned char urgent[2];
} my_header;
int readfile(char filename[])
{
FILE *fp;
int pointer, i;
unsigned char buffer[20];
fp = fopen(filename, "r");
if(!fp){ return 1; }
fread(&my_header, sizeof(my_header), 1, fp);
i = 0;
pointer = 0;
while (pointer < 2)
{
my_header.sourceport[pointer] = buffer[pointer];
pointer++;
}
while (pointer < 4)
{
my_header.destination[pointer - 2] = buffer[pointer];
pointer++;
}
while(pointer < 8)
{
my_header.sequence[pointer - 4] = buffer[pointer];
pointer++;
}
while(pointer < 12)
{
my_header.ackno[pointer - 8] = buffer[pointer];
pointer++;
}
while(pointer < 14)
{
my_header.other[pointer - 12] = buffer[pointer];
pointer++;
}
while(pointer < 16)
{
my_header.window[pointer - 14] = buffer[pointer];
pointer++;
}
while(pointer < 18)
{
my_header.checksum[pointer - 16] = buffer[pointer];
pointer++;
}
while(pointer < 20)
{
my_header.urgent[pointer - 18] = buffer[pointer];
pointer++;
}
fclose(fp);
return 0;
}
int main(int argc, char* argv)
{
int check;
unsigned char swap[2];
check = readfile("test.bin");
/* Checking for file to read */
if(check == 0)
{
printf("File successfully read\n");
}
/* If file is not found */
if(check == 1)
{
printf("Cannot open/find file.\n");
}
strcpy(swap,my_header.sourceport);
strcpy(my_header.sourceport, my_header.destination);
strcpy(my_header.destination, swap);
writefile("test.bin");
return 0;
}
【问题讨论】:
标签: c tcp bin read-write