如何将wpa_supplicant ssid字串转换为utf8

在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 *

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值