一、模拟CE搜索数据
1、按照1字节搜索数据
#include <windows.h>
#include <stdio.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 main(){
char* a;
a=data;
for(int i=0;i<100;i++)
{
printf("打印第%d个值,该值为%d,地址为%dn",i,*(a+i),a+i);
}
}
2、按照2字节搜索数据
#include <windows.h>
#include <stdio.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 main(){
short* a;
a=(short*)data;
for(int i=0;i<50;i++)
{
printf("打印第%d个值,该值为%x,地址为%xn",i,*(a+i),a+i);
}
}
3、按照4字节搜索数据
#include <windows.h>
#include <stdio.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 main(){
int* a;
a=(int*)data;
for(int i=0;i<25;i++)
{
printf("打印第%d个值,该值为%x,地址为%xn",i,*(a+i),a+i);
}
}
4、int型搜索
#include <windows.h>
#include <stdio.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 main(){
int* a;
a=(int*)data;
char* x;
x=data;
for(int i=0;i<100-4;i++)
{
if(*a == 0x64)
{
printf("地址为%x,值为%xn",a,*(a));
}
x++;
a =(int*)x;
}
}
https://blog.51cto.com/u_15069441/4150841
1、数据类型为int型,即宽度为4个字节,需要注意在内存中整数存储时高位存高位低位存低位,如果某4字节的值为0x00 0x01 0x02 0x03,那int型值应为0x03020100
2、注意指针加法的跨度,char*+1内存地址+1,short*+1内存地址+2,int*+1内存地址+4
3、内存并没有指定变量范围,也就是说任意4个连续的地址都有可能是一个int类型
4、注意结束点,因为int类型宽度为4,所以在扫描时结束点因为内存长度-4
二、字符串指针
#include <windows.h>
#include <stdio.h>
char* x="china"; //常量字符串,存储在常量区,不可以被修改。
//x存储在堆栈中,但是china存储在常量区。
char y[]="china";
void main(){
// *(x+1) = 'a';
x = "china1";
}
x的指向的首地址可以修改,但是地址指向的值不可以修改。
三、字符串函数
字符串大小
#include <windows.h>
#include <stdio.h>
int strlen(char *s) {
int i=0;
while(*(s) != '
评论