2014-01-24 84 views
0

我需要格式化整數作爲MAC地址(01-1A-1B-2B-30等)。有沒有辦法直接與string.format()? 我所有的attepts至今都未能:string.format()與coustom十六進制格式

string.Format("{0:X}", 1234567); //Output: 12D687 It is hex, but not formatted 
string.Format("{0:00-00-00-00}", 1234567); //Output: 01-23-45-67 Formatted, but not hex 
string.Format("{0:00-00-00-00}", string.Format("{0:X}", 1234567)); //Output: 01-23-45-67 Also dosn't work and is ugly. 
string.Format("{0:X00-00-00-00}", 1234567); //Output: X01-23-45-67 Well. Still no success here. 
+2

首先所有,一個整數不會產生一個MAC地址,因爲一個MAC包含6個字節(48位),而一個整數通常由4個字節(32位)組成。所以你不會從int中獲得一個完整的MAC地址。除此之外,你也許可以用這個答案中的解決方案進行一些調整:http://stackoverflow.com/a/7310740/254797 –

+0

謝謝,但我知道。該整數只是MAC的設備部分。其餘由我們的製造商ID確定。 – Turbofant

回答

2

這將包括一個-分隔符;

BitConverter.ToString(BitConverter.GetBytes(1234567)) 
0

你需要爲每個字節的佔位符,並在傳遞整數數組:

// We have a format string that spits out hex for each byte seperated by a dash. 
// ToString expects either a params or an object array, so let's get the bytes 
// as a byte array, and convert it to an array of object 
String.Format("{0:X}-{1:X}-{2:X}-{3:X}", BitConverter.GetBytes(1234567).Cast<Object>().ToArray()) 
+0

每Philipp,與您的MAC地址字節數組交換BitConverter.GetBytes()調用。 (爲額外字節添加額外的格式字符串佔位符),並且此解決方案仍然適用於您。 –

0

一旦你把它變成一個十六進制字符串,您可以使用此方法其分割成塊大小2,然後用連字符

void Main() 
{ 
    var str = string.Format("{0:X}", 12345678); 
    var splits = Split(str, 2); 
    var rejoinedSplits = string.Join("-",splits); 
    Console.WriteLine (rejoinedSplits); //tested in linqpad, gave me BC-61-4E 
} 
static IEnumerable<string> Split(string str, int chunkSize) 
{ 
     return Enumerable.Range(0, str.Length/chunkSize).Select(i => str.Substring(i * chunkSize, chunkSize)); 
} 
1

歸隊它使用

BitConverter.ToString(BitConverter.GetBytes(1234567))