如何将wpa_supplicant ssid字串转换为utf8

来源:互联网 发布:mac os x 10.12镜像 编辑:程序博客网 时间:2024/05/16 09:41
在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 *

0 0