我有两个文本文件in.text
和out.text
。我将把它们读入unsigned char **
,其中数组的每个元素都存储长度为T = 32的数据,如下面的代码
char *filename = "in.text";
FILE *stream;
int numPackets = 10;
int T = 32; // Length of each packets
unsigned char **PacketsIn;
fopen_s(&stream, filename, "rb");
fseek(stream, 0, SEEK_SET);
for (int i = 0; i < numPackets; i++) {
fread(PacketsIn[i], 1, T, stream);
}
fclose(stream);
以同样的方式,我可以使用上面的代码获得PacketsOut
filename = "out.text";
FILE *streamout;
numPackets = 10;
T = 32; // Length of each packets
unsigned char **PacketsOut;
fopen_s(&streamout, filename, "rb");
fseek(streamout, 0, SEEK_SET);
for (int i = 0; i < numPackets; i++) {
fread(PacketsOut[i], 1, T, streamout);
}
fclose(streamout);
我想计算PacketsIn
和PacketOut
中有多少不同的数据包(每个数据包有10个数据包,我们将比较PacketsIn
中的第一个数据包和PacketsOut
中的第一个数据包如果它们不同,则计数增加1)。你能帮我解决一下吗?
这就是我试过的
int count = 0;
for (int i = 0; i < numPackets; i++) {
if (PacketsIn[i] != PacketsOut[i])
count++;
}
答案 0 :(得分:2)
当memcmp返回非零值时,这表示两个给定字符串之间的差异:
#include <string.h>
if (memcmp(PacketsIn[i],PacketsOut[i],32)!=0)
count++
答案 1 :(得分:2)
数据包是字节数组,您必须为这些数组分配内存,可以是自动存储,也可以是函数的本地存储,也可以是malloc
的堆。此外,您无法将数组与==
或!=
进行比较,您需要使用执行逐字节比较的函数。 memcmp
中声明的<string.h>
执行此操作,如果数组不同,则返回非0值。
以下是更正后的版本:
#include <string.h>
int compare_packets(void) {
FILE *stream;
int numPackets = 10;
int T = 32; // Length of each packet
unsigned char PacketsIn[numPackets][T];
unsigned char PacketsOut[numPackets][T];
fopen_s(&stream, "in.text", "rb");
for (int i = 0; i < numPackets; i++) {
fread(PacketsIn[i], 1, T, stream);
}
fclose(stream);
fopen_s(&stream, "out.text", "rb");
for (int i = 0; i < numPackets; i++) {
fread(PacketsOut[i], 1, T, stream);
}
fclose(stream);
int count = 0;
for (int i = 0; i < numPackets; i++) {
if (memcmp(PacketsIn[i], PacketsOut[i], T)
count++;
}
return count;
}