在PC平台 char *buf3 = "\xe8\xbf\x9e\xe7\x94\xa8\xe7\x94\xb5\xe5\xbd\xb1\xe5\x90\x8e\xe6\x82\x94\xe4\xba\x86\xe4\xba\x86\xe4\xbb\x96\xe5\x92\xaf";
Strlen(buf3)=30, 而不是120. 导致验证的过程中费了写周折。
snprintf(buf1, 120, "%s", buf3); Strlen(buf1)= 30;
后来采用如下方法逐个赋值验证才OK。
buf1[0] = '\\'; buf1[1] = 'x'; buf1[2] = 'e'; buf1[3] = '8';
下面接口可以直接调用将\xe8\xbf\x9e转换为对应的utf码, 转换前是12个字节,转换后是3个字节.
void mid_wifi_ssid_convert_utf8(unsigned char *ssid, char *bssid, int size)
{
int ssid_char;
int i=0, j=0;
bool bcheck;
printf("%s size = %d \n", __func__, size);
for (i=0; i < size; i++)
{
printf("%s j = %d \n", __func__, j);
if (bssid[i] == '\0' || j >= WLAN_WIFI_SSID)
{
printf("%s end j = %d \n", __func__, j);
break;
}
bcheck = ((bssid[i] == '\\' && bssid[i+1] == 'x') || (bssid[i] == '\\' && bssid[i+1] == 'X'));
if ( bcheck
&& (bssid[i+2] >= '0' && bssid[i+2] <='f')
&& (bssid[i+3] >= '0' && bssid[i+3] <='f'))
{
ssid_char = (mid_wifi_ssid_convert_decimal(bssid[i+2]) << 4) + mid_wifi_ssid_convert_decimal(bssid[i+3]);
if (ssid_char <= 255)
{
ssid[j] = ssid_char;
printf("%s ssid_char = %d \n", __func__, ssid_char);
}
else
{
ssid[j] = 0;
printf("%s invalid ssid info. ssid_char = %d\n", __func__, ssid_char);
}
i += 3;
j++;
}
else
{
ssid[j] = bssid[i];
j++;
}
}
ssid[j] = '\0';
}
unsigned char mid_wifi_ssid_convert_decimal(char ssid)
{
unsigned char ssid_char = 0;
if (ssid >= '0' && ssid <='9')
{
ssid_char = ssid - '0';
}
else if (ssid >= 'a' && ssid <='f')
{
ssid_char = ssid - 'a' + 10;
}
else if (ssid >= 'A' && ssid <='F')
{
ssid_char = ssid - 'A' + 10;
}
else
{
ssid_char = 0;
}
return ssid_char;
}
//下面添加一段小插叙
/* skip
unsigned char char1 = 254;
char char2 = 254;
printf("char1 = %d\n",char1);
printf("char2 = %d\n",char2);
printf("char1 = 0x%02x \n",char1);
printf("char2 = 0x%02x \n", (unsigned char)char2);
printf("char1 = %x \n",char1);
printf("char2 = %x \n",char2);
char1 = 254
char2 = -2
char1 = 0xfe
char2 = 0xfe
char1 = fe
char2 = fffffffe *