2014-01-24 2 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 бит), а int обычно состоит из 4 байтов (32 бит). Таким образом, вы не получите полный MAC-адрес от int. Помимо этого вы могли бы использовать решение в этом ответе с небольшими корректировками: http://stackoverflow.com/a/7310740/254797 –

+0

Спасибо, но я это знаю. Целое число является только частью устройства MAC. Остальное - наш идентификатор производителя. – 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

Per Philipp, обменивайте вызов BitConverter.GetBytes() с массивом байтов для вашего MAC-адреса. (добавьте дополнительные заполнители строки форматирования для дополнительных байтов), и это решение по-прежнему будет работать для вас. –

0

После того, как вы включите его в шестнадцатеричную строку, вы можете использовать этот метод, чтобы разделить его на chunkSize 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)) 
Смежные вопросы