Как преобразовать 6 байтов, представляющих MAC-адрес, в строку, которая отображает адрес в виде шестизначных значений, разделенных двоеточием?C++ Листинг двоичного значения байта в строку
Благодаря
Как преобразовать 6 байтов, представляющих MAC-адрес, в строку, которая отображает адрес в виде шестизначных значений, разделенных двоеточием?C++ Листинг двоичного значения байта в строку
Благодаря
Вы, вероятно, хотите последовательность из шести байтов должен быть отформатирован следующим образом:
aa:bb:cc:dd:ee:ff
где aa
первый байт отформатирован в шестнадцатеричном формате.
Что-то вроде этого нужно сделать:
char MAC[6]; //< I am assuming this has real content
std::ostringstream ss;
for (int i=0; i<6; ++i) {
if (i != 0) ss << ':';
ss.width(2); //< Use two chars for each byte
ss.fill('0'); //< Fill up with '0' if the number is only one hexadecimal digit
ss << std::hex << (int)(MAC[i]);
}
return ss.str();
Если вы дорого хотите сделать это в литом подобный стиль (угадывание из Вашего названия здесь), вы можете создать класс MAC, реализовать ostream-оператор для него (как и данный код) и используйте boost::lexical_cast
.
Если это не завершено нулем, вы можете использовать метод assign() std :: string, который необязательно принимает два дополнительных аргумента начальной позиции и количества символов, например. std :: string str; str.assign (reinterpret_cast
Ввод представляет собой двоичное значение в 6 байт, которое предоставляется мне из библиотеки Net-SNMP, и все, что мне нужно, - это шестнадцатеричное значение, которое оно возвращает, поскольку это MAC-адрес. – aHunter
Я добавил эту информацию к вашему вопросу, так как совершенно не ясно, что именно это вы хотели сделать. –
Не уверен, если вы имеете в виду перевод или перевод. Если конвертировать, то это зависит от того, в какой форме вы хотите. Вы можете захотеть Hex, base-64, восьмеричный, ...
Если вы хотите использовать hex, рассмотрите функцию STLSoftformat_bytes()
, которая может выполнять все виды упорядочивания и группировки.
Если вы хотите использовать base-64, рассмотрите b64 library.
НТН
[EDIT] В соответствии с редактированием на OP, полный реализ будет:
#include <stlsoft/conversion/byte_format_functions.hpp>
#include <stdio.h>
int main()
{
unsigned char mac[6];
char result[STLSOFT_NUM_ELEMENTS(mac) * 3];
stlsoft::format_bytes(mac, sizeof(mac), &result[0], STLSOFT_NUM_ELEMENTS(result), 1, ":");
puts(result);
return 0;
}
Там нет необходимости в этом случае для проверки возвращаемого значения format_bytes()
, потому что вы проходите достаточно буфера записи. В реальном случае, если вы хотели бы проверить
Что вы хотите получить в полученной строке? Вам нужно текстовое представление байтов (например, hex) или вы хотите фактически интерпретировать 6 байтов как ASCII (или некоторую другую кодировку)? – Joe
Я ищу, чтобы получить текстовое представление, так что да шестнадцатеричный. – aHunter
Или это 48-битное число? Если да, то в чем кодировка, и что такое endian-ness? – patros