2010-03-17 84 views
0

我正在使用CWNetwork獲取接口的mac(hw)地址。現在OS X以xx:xx:xx:xx:xx:xx格式給我這個mac地址。但是如果第一個數字是0,OS X將輸出地址爲4:aa:dd:ee:34:40,而不是04:aa:dd:ee:34:40。以正確的格式顯示mac地址

現在我試圖在顯示它之前將字符串4:aa:dd:ee:34:40並將其轉換爲04:aa:dd:ee:34:40。 任何想法? APpreciate幫助。

回答

0

我相信下面的代碼是做你想做的。

NSString *macAddress = @"4:aa:dd:ee:34:40"; 
NSScanner *scanner = [NSScanner scannerWithString:macAddress]; 
[scanner setCharactersToBeSkipped:[NSCharacterSet punctuationCharacterSet]]; 
NSMutableString *result = [NSMutableString stringWithCapacity:[macAddress length]]; 
while (![scanner isAtEnd]) { 
    unsigned theValue; 
    if ([scanner scanHexInt:&theValue]) { 
     [result appendFormat:@":%02x",theValue]; 
    } else { 
     [result appendString:@":??"]; 
    } 
} 
NSLog(@"%@",[result substringFromIndex:1]); 
+0

謝謝艾薩克。 NSScanner和scanHexInt方法是我所需要的。 – cocoacoder 2010-03-18 22:44:13

1

你不是自己調用ether_ntoa(3),是嗎?我似乎記得,ether_ntoa是通常的罪魁禍首,喜歡從MAC地址的每個八位組中刪除前導零。

你能得到MAC地址的原始字節(如sockaddr_dl-> sdl_data,而不是預格式化的字符串),然後用你自己的printf樣式格式字符串按照你想要的格式進行格式化嗎?像「%02x:%02x:%02x:%02x:%02x:%02x」可能就是你想要的。