Сохранение / сравнение u_char передано в функцию - PullRequest
0 голосов
/ 04 февраля 2010

У меня есть простая функция, которая передает переменную "var" в виде массива u_char. У меня нет проблем с печатью этого массива.

    printf("%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x", var[0], var [1], var[2], var[3], var[4], var[5]);

Распечатывает MAC-адрес так, как мне нравится.

Я не могу на всю жизнь найти правильный способ сохранить этот Mac-адрес и сравнить его с другой строкой. В идеале это то, что я ищу:

global OldString="00:00:00:00:00:00"

NewString=getCurrentMacAddress();

if OldString = Newstring then ignore else some_function

Но я весь день бился головой о стену, просто пытаясь сохранить этот вывод "var" в виде строки. Я пробовал strcpy, я пытался зацикливаться с циклом for, я пробовал все, что мог найти в Google, от malloc до глобального объявления вместо передачи значения функции.

Любая помощь приветствуется. Я совершенно новичок в C и просто пытаюсь написать простой маленький инструмент ... Это занимает больше времени, чем следовало бы.

Ответы [ 2 ]

3 голосов
/ 04 февраля 2010

snprintf() будет использовать ту же строку формата и параметры, что и вызов printf(), с которым вы уже работали.

char NewString[] = "00:00:00:00:00:00";  // initializing with this string is just a lazy
                                         //   way to get the right amount of storage

snprintf( NewString, sizeof( NewString), "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x", var[0], var [1], var[2], var[3], var[4], var[5]);
1 голос
/ 04 февраля 2010

У вас есть два основных варианта:

  1. Сохраните (или преобразуйте) глобальную OldString в массив из 6 байтовых значений, а затем используйте memcmp() для сравнения этих 6 байтов с 6 байтами в 'var'.

  2. Преобразуйте 'var' в строку, используя snprintf () или что-то подобное, а затем используйте 'strcmp ()', чтобы сравнить эту строку с OldString.

Оба механизма работают. Что лучше, зависит от того, как вы собираетесь использовать значения. Если вам в основном нужна двоичная форма, то вариант 1, вероятно, лучше; если вам в основном нужна строковая форма, лучше использовать вариант 2.

(Майкл Барр дает точный способ использования snprintf(), хотя в теории вы должны проверить его возвращаемое значение, чтобы убедиться, что оно ведет себя правильно.)

...