/*******************************************************************************
* @fn Insert_String
*
* @brief 将指定长度的字符串插入到另一个字符串的指定位置
*
* @param oldstr 旧字符串; instr[] 插入的字符串;location 插入的位置; length 插入的数据长度
*
* @return no
*******************************************************************************/
void Insert_String(char *oldstr, char instr[], int location, uint8_t length)
{
int j, k;
char dat_tmp[100];
for(j=0; j<location-1; j++)//将位置前的数据存到dat_tmp
dat_tmp[j] = oldstr[j];
//将instr复制到dat_tmp后面
j--;
k = 0;
while(length--)
{
j++;
dat_tmp[j] = instr[k];
k++;
}
//将oldstr第location位后复制到dat_tmp尾部
k = location - 1;
while(oldstr[k] != '\0')
{
j++;
dat_tmp[j] = oldstr[k];
k++;
}
//给dat_tmp字符串添加结束符
j++;
dat_tmp[j] = '\0';
//将dat_tmp字符串复制给oldstr
for(k=0; k<=j; k++)
oldstr[k] = dat_tmp[k];
}
举例:字符串中存放着wifi密码和账号,需要修改字符串中的密码和账号
char set_wifi[100] = "AT+CWJAP_DEF=\"wifi_name\",\"wifi_pswd\"\r\n";//要改动的字符串
void WiFi_CFG(uint8_t *buf, uint16_t len)//从串口中收到数据后调用此函数
{
uint8_t date_len;
static char set_wifi_head[100] = "AT+CWJAP_DEF=\"\",\"\"\r\n";
char set_wifi_name[20], set_wifi_pswd[20];
static uint8_t name_date_len, pswd_date_len;//wifi名称长度,密码长度
date_len = len;
memcpy(Wireless_Data_BLE.RX_data, buf, date_len);//Wireless_Data_BLE.RX_data存放从蓝牙串口收到的数据
if(Wireless_Data_BLE.RX_data[0] == 'W')//配置wifi名称
{
memcpy(set_wifi_name, Wireless_Data_BLE.RX_data+2, date_len-2);//复制wifi名字到数组中
name_date_len = date_len-2;//2是帧头长度
Insert_String(set_wifi_head, set_wifi_name, 15, name_date_len);//插入wifi名字到数组中
//Ble_REC_Flag.wifi_name_ok = 1;
}
else if(Wireless_Data_BLE.RX_data[0] == 'P')//配置wifi密码
{
memcpy(set_wifi_pswd, Wireless_Data_BLE.RX_data+2, date_len-2);//复制wifi密码到数组中
pswd_date_len = date_len-2;//2是帧头长度
Insert_String(set_wifi_head, set_wifi_pswd, 18+name_date_len, pswd_date_len);//插入wifi密码到数组中
//Ble_REC_Flag.wifi_pswd_ok = 1;
memset(set_wifi, 0, sizeof(set_wifi)); //清空wifi信息
strcpy(set_wifi, set_wifi_head);//更新wifi信息
}
memcpy(Wireless_Data_BLE.TX_data, Wireless_Data_BLE.RX_data, date_len);//回馈用
Wireless_Data_BLE.TX_length = date_len;
memset(Wireless_Data_WiFi.RX_data, 0, date_len); //清空接收
}
}