CE 的使用这里就不总结了,需要的时候直接搜要全活得多

课后作业

模拟实现 CE 的数据搜索功能:

这一堆数据中存储了角色的血值信息,假设血值的类型为 int 类型,值为 100(10进制),请列出所有可能的值以及该值对应的地址。

1
2
3
4
5
6
7
8
9
10
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x07,0x09,				
0x00,0x20,0x10,0x03,0x03,0x0C,0x00,0x00,0x44,0x00,
0x00,0x33,0x00,0x47,0x0C,0x0E,0x00,0x0D,0x00,0x11,
0x00,0x00,0x00,0x02,0x64,0x00,0x00,0x00,0xAA,0x00,
0x00,0x00,0x64,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x02,0x00,0x74,0x0F,0x41,0x00,0x00,0x00,
0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0A,0x00,
0x00,0x02,0x74,0x0F,0x41,0x00,0x06,0x08,0x00,0x00,
0x00,0x00,0x00,0x64,0x00,0x0F,0x00,0x00,0x0D,0x00,
0x00,0x00,0x23,0x00,0x00,0x64,0x00,0x00,0x64,0x00

每一个位置都有可能是 int 数据的起始位置,以及计算机内是小端存储的,所以符合条件的应是 0x64 0x00 0x00 0x00 这个样子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdafx.h"
char data[100] = {
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x07,0x09,
0x00,0x20,0x10,0x03,0x03,0x0C,0x00,0x00,0x44,0x00,
0x00,0x33,0x00,0x47,0x0C,0x0E,0x00,0x0D,0x00,0x11,
0x00,0x00,0x00,0x02,0x64,0x00,0x00,0x00,0xAA,0x00,
0x00,0x00,0x64,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x02,0x00,0x74,0x0F,0x41,0x00,0x00,0x00,
0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0A,0x00,
0x00,0x02,0x74,0x0F,0x41,0x00,0x06,0x08,0x00,0x00,
0x00,0x00,0x00,0x64,0x00,0x0F,0x00,0x00,0x0D,0x00,
0x00,0x00,0x23,0x00,0x00,0x64,0x00,0x00,0x64,0x00
};
void Function(int num) {
int len = sizeof(data);
for (int i = 0; i < len - sizeof(int) + 1; i++) {
int* p = (int*)(data + i);
if (*p == num) printf("%x\n", p);
}
}
int main(int argc, char* argv[]) {
Function(100);
return 0;
}

电脑没在身边就不运行演示了,总之符合条件的应该只有一处(第四行中间那里)