- 一次性提取长字符串中的多个短字符串
unsigned char sub_str(unsigned char *pos, char *str)
{
unsigned char len = strlen(str);
unsigned char n = 0, i = 0;
for(;i < len;i++)
{
if(str[i] == ' '){
str[i] = 0;
pos[n++] = (i + 1);
printf("i = %d,pos[%d] = %d \r\n",i,n,pos[n]);
}
}
return n;
}
unsigned char pos[10] = {0};
char str[30];
strcpy(str,"abc 1000 50 off 2500");
sub_str(pos,str);
//printf("%s\r\n",str);
printf("%s\r\n",str + pos[0]);
printf("%s\r\n",str + pos[1]);
printf("%s\r\n",str + pos[2]);
printf("%s\r\n",str + pos[3]);
- 字符数组和字符串
字符串时一种有特定约束的字符数组(字符串最后一个字符为\0)
/* 字符数组与字符串两者时基本等价的 */
char str1[10]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char *str2 = "0123456789ABCDEF"//相当于{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','\0'};
- 字符串 + 转义字符可以表达任何数据序列
uint8_t buf[10] = {0x12,0x34,0x56,0x78};
char *str_buf = "\x12\x34\x56\x78";
printf("0x%x 0x%x 0x%x 0x%x\r\n",str_buf[0],str_buf[1],str_buf[2],str_buf[3]);
//0x12 0x34 0x56 0x78
/*
\x 转义序列
\x 转义序列是用于表示字符的十六进制值的方法。它的形式是 \x 后跟两个十六进制数字,用于表示一个字符。这通常用于字符串中,以表示包含特殊字符的字符序列。
*/
- KEIL在中文字符串上的一个常见bug
0xFD问题,凡是汉字内码低位为FD的均会出现乱码
- 数组的区间初始化
//一般操作
#define MAX (10)
int buf[MAX] = {0xaa,0xff};
buf[MAX - 3] = 0x12;
buf[MAX - 2] = 0x34;
buf[MAX - 1] = 0x56;
//二般操作
#define MAX (10)
int bump[MAX] = {0xaa,0x55,[MAX -3]=0x12,0x34,0x56};