2012-11-27 12 views
8

mam adres MAC, który jest sformatowany jak 0018103AB839 i chcę, aby wyświetlić to lubią: 00:18:10:3A:B8:39Format adresu MAC za pomocą string.Format wC#

próbuję to zrobić z string.Format ale ja naprawdę nie mogę znaleźć dokładna składnia.

teraz próbuję coś takiego:

string macaddress = 0018103AB839; 
    string newformat = string.Format("{0:00:00:00:00:00:00}", macaddress); 

Czy to w ogóle możliwe? czy powinienem użyć string.Insert?

+0

powinieneś rozważyć wyrażenie regularne takiego http://stackoverflow.com/questions/4260467/what-is-a-regular-expression -for-a-mac-adres – Marc

+0

nie jest ragexem tylko do znalezienia czegoś w stylu, staram się przekonwertować styl :) – 2pietjuh2

+1

Nie dokładny duplikat, ale prawie ten sam problem: http: // stackoverflow. com/questions/188510/how-to-format-a-string-as-a-telephone-number-in-c-sharp –

Odpowiedz

6

sformatować ciąg, aby wyświetlić go jako adres MAC:

var macadres = "0018103AB839"; 

var regex = "(.{2})(.{2})(.{2})(.{2})(.{2})(.{2})"; 
var replace = "$1:$2:$3:$4:$5:$6"; 
var newformat = Regex.Replace(macadres, regex, replace);  

// newformat = "00:18:10:3A:B8:39" 

Jeśli chcesz sprawdzić poprawność ciąg wejściowy używać tego wyrażenia regularnego (Dzięki J0HN):

var regex = String.Concat(Enumerable.Repeat("([a-fA-F0-9]{2})", 6)); 
+0

Dobre rozwiązanie, ale należy je hermetyzować w dostawcy formatu niestandardowego dla systemu DRY. – jlvaquero

+1

Istnieją dwie możliwe usterki z wyrażeniami regularnymi: (1) nie działa na poprawne dane wejściowe, (2) działa nieprawidłowo. Zatem twoje rozwiązanie jest narażone na drugą wadę: spróbuj nakarmić go "! @ # $%^& *() - +" - z przyjemnością wyświetli go jako adres mac. Rozumiem, że OP nie mówi nic o walidacji, ale byłoby miło, gdybyś zamienił kropki na '[a-fA-F0-9]' lub przynajmniej '\ w'. – J0HN

+0

@ J0HN Tak, zgadzam się, ale jak powiedziałeś, OP poprosił o wyświetlanie ciągu jako adresu MAC. Tak więc pytanie brzmi: czy * naprawdę * lepiej nic nie wyświetlać, jeśli dane wejściowe nie są poprawnym adresem MAC? Myślę, że to zależy od sytuacji, ale dodam twoje zatwierdzenie jako opcję do mojej odpowiedzi, dziękuję! – Marc

1
var strings = macadres 
    .Select((value, index) => new { Pair = index/2, value }) 
    .GroupBy(g => g.Pair) 
    .Select(g => g.Aggregate("", (accumulated, elem) => accumulated+elem.value)); 

string formatted = String.Join(":", strings); 
+0

+1, zdecydowanie kreatywny. = D –

0

Przypuśćmy że mamy adres Maca przechowywany długo. Jest to, jak mają je w sformatowanym wyrażenie:

ulong lMacAddr = 0x0018103AB839L; 
string strMacAddr = String.Format("{0:X2}:{1:X2}:{2:X2}:{3:X2}:{4:X2}:{5:X2}", 
    (lMacAddr >> (8 * 5)) & 0xff, 
    (lMacAddr >> (8 * 4)) & 0xff, 
    (lMacAddr >> (8 * 3)) & 0xff, 
    (lMacAddr >> (8 * 2)) & 0xff, 
    (lMacAddr >> (8 * 1)) & 0xff, 
    (lMacAddr >> (8 * 0)) & 0xff); 
3
string input = "0018103AB839"; 

var output = string.Join(":", Enumerable.Range(0, 6) 
    .Select(i => input.Substring(i * 2, 2))); 
+0

Zdecydowanie schludny. –

Powiązane problemy