2012-11-27 47 views
8

Tôi có một địa chỉ mac được định dạng giống như 0018103AB839 và tôi muốn hiển thị nó thích: 00:18:10:3A:B8:39Format một địa chỉ MAC sử dụng string.Format trong C#

Tôi cố gắng để làm điều này với string.Format nhưng tôi không thể thực sự tìm ra cú pháp chính xác.

ngay bây giờ tôi đang cố gắng một cái gì đó như thế này:

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

Đây có phải là thậm chí có thể? hoặc tôi nên sử dụng string.Insert?

+0

Bạn có lẽ nên xem xét một biểu hiện thường xuyên như thế này http://stackoverflow.com/questions/4260467/what-is-a-regular-expression -for-a-mac-address – Marc

+0

không phải là ragex chỉ để tìm một cái gì đó trong một phong cách, tôi đang cố gắng để chuyển đổi phong cách :) – 2pietjuh2

+1

Không phải là một bản sao chính xác, nhưng khá nhiều cùng một vấn đề: http: // stackoverflow. com/questions/188510/how-to-format-a-string-as-a-phone-number-in-c-sharp –

Trả lời

6

Định dạng lại một chuỗi để hiển thị nó như là một địa chỉ 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" 

Nếu bạn muốn xác nhận chuỗi đầu vào sử dụng regex này (nhờ J0HN):

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

Giải pháp tốt nhưng bạn sẽ đóng gói nó trong Nhà cung cấp Định dạng Tùy chỉnh cho DRY. – jlvaquero

+1

Vâng, có hai sai sót có thể có với regexes: (1) nó không hoạt động trên đầu vào hợp lệ, (2) nó hoạt động cho đầu vào không hợp lệ. Vì vậy, giải pháp của bạn là đối tượng cho lỗ hổng thứ hai: thử ăn nó với "! @ # $%^& *() - +" - nó sẽ vui vẻ hiển thị nó như là một địa chỉ mac. Tôi hiểu rằng OP không nói gì về việc xác thực, nhưng sẽ tốt hơn nếu bạn thay thế các dấu chấm bằng '[a-fA-F0-9]', hoặc ít nhất là '\ w'. – J0HN

+0

@ J0HN Có, tôi đồng ý nhưng như bạn đã nói OP hỏi về việc hiển thị một chuỗi như là một địa chỉ MAC. Vì vậy, câu hỏi ở đây sẽ là: là nó * thực sự * tốt hơn để hiển thị không có gì nếu đầu vào không phải là một địa chỉ MAC hợp lệ? Tôi nghĩ rằng nó phụ thuộc vào tình hình nhưng tôi sẽ thêm xác nhận của bạn như là một lựa chọn để trả lời của tôi, cảm ơn bạn! – 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, chắc chắn sáng tạo. = D –

0

Giả rằng chúng tôi có địa chỉ Mac được lưu trữ trong một thời gian dài. Đây là cách để có nó trong một chuỗi định dạng:

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

Quyết định gọn gàng. –

Các vấn đề liên quan