2015-01-21 79 views
4

我使用的功能,看看目标C从iOS设备上的WiFi点获取MAC地址,并没有看到零地址

BSSID = "d4:ca:6d:d4:e:89"; 
SSID = "ExtremeFitness_FreeInternet"; 
SSIDDATA = <45787472 656d6546 69746e65 73735f46 72656549 6e746572 6e6574>; 

但来自WiFi指针D4 MAC地址:CA:6D:D4: 0E:后89

,我比较与数据库中的MAC地址当前的WiFi BSSID,比较的NSString

,为什么我不能在这个代码中看到的0?

+(NSString *) getMac{ 

CFArrayRef myArray = CNCopySupportedInterfaces(); 
CFDictionaryRef captiveNetWork = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0)); 
//NSLog(@"Connected at : %@", captiveNetWork); 
NSDictionary *myDictionnary = (__bridge NSDictionary *)captiveNetWork; 
NSString *bssid = [myDictionnary objectForKey:@"BSSID"]; 

if (bssid.length == 0) { 

    return @""; 
} 

return bssid; 
} 

-(void)compareMacAddress{ 

for (int i = 0; i < _clubs.count; i ++) { 


    NSString *macFromClub = [[NSString stringWithFormat:@"%@", _clubs[i][@"mac"]] lowercaseString]; 

    NSLog(@"%@", _clubs[i]); 

    EFMacAddressUtil *macUtil = [[EFMacAddressUtil alloc] init]; 

    NSLog(@"%@", [[macUtil getMac] lowercaseString]); 

    NSRange range = [macFromClub rangeOfString:[[macUtil getMac] lowercaseString]]; 

    if (range.length > 0) { 

     [_clubInfo setObject:_clubs[i][@"address"] forKey:@"address"]; 
     [_clubInfo setObject:_clubs[i][@"id"]  forKey:@"id"]; 
     [_clubInfo setObject:_clubs[i][@"ip"]  forKey:@"ip"]; 
     [_clubInfo setObject:_clubs[i][@"mac"]  forKey:@"mac"]; 

     _inClub = true; 

     [_mainOfficeTableView reloadData]; 
     break; 

    }else{ 

     _inClub = false; 

     [_mainOfficeTableView reloadData]; 
    } 
} 

}

+1

IM不知道为什么会发生这种情况,但我猜测它只是将这些值解释为普通的旧十六进制,而0e与e完全相同,所以如果缺少数字,您可以编写一个小函数来插入0。除非有人提出实际的答案 – Fonix 2015-01-21 03:26:09

+2

正如@Fonix所说,0e和e在数值上是等价的。看起来,Captive Network框架内的代码在转换为十六进制字符串时不会添加前导0。 – Paulw11 2015-01-21 03:29:32

回答

2

解决 如果我的应用程序在Mac地址:xx看到:XX:XX:E:XX:XX我做字符串XX:XX:XX:0E:XX:XX

+0

我遇到了同样的错误,并且与您的解决方案一样 – 2018-01-15 02:41:54