2010-02-04 14 views
0

J'ai une fonction simple qui transmet une variable "var" en tant que tableau u_char. Je n'ai aucune difficulté à imprimer ce tableau.Enregistrement/comparaison de u_char transmis à la fonction

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]); 

Imprime l'adresse mac comme je l'aime.

Je ne peux pas pour la vie de moi trouver la bonne façon de stocker cette adresse Mac et de le comparer avec une autre chaîne. Idéalement, ce que je suis après:

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

NewString=getCurrentMacAddress(); 

if OldString = Newstring then ignore else some_function 

Mais j'ai été me cogner la tête contre un mur toute la journée juste essayer de stocker cette sortie « var » comme une chaîne. J'ai essayé strcpy, j'ai essayé de boucler avec une boucle for, j'ai essayé tout ce que je pouvais trouver sur google de malloc à la déclaration globale au lieu de passer la valeur à la fonction.

Toute aide est appréciée. Je suis complètement nouveau à C et j'essaie juste d'écrire un petit outil simple ... Il prend beaucoup plus de temps qu'il ne le devrait.

+0

Vous devriez nous en dire plus sur ce type de structure de données 'stocke getCurrentMacAddress' ses données dans. Pour comparer les chaînes en C, vous avez besoin de 'strcmp'. L'opérateur de comparaison est '==', pas '=', btw, et 'global' devrait être' char * '. Peut-être que vous devriez nous montrer un vrai code! :-) –

+0

désolé à ce sujet - j'ai tendance à utiliser pseudocode lorsque je propose des questions générales. Je dois vraiment arrêter ça. –

Répondre

3

snprintf() utilise la même chaîne de caractères et les mêmes paramètres que l'appel printf() que vous avez déjà travaillé.

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]); 
+0

Je ne peux pas dire combien je suis reconnaissant - j'ai été ******** autour de cela trop longtemps. Merci merci merci. –

+0

+1 pour deviner correctement ce que l'OP voulait. –

1

Vous avez deux options principales:

  1. Store (ou convertir) le OldString global dans un tableau de 6 valeurs d'octets, puis utilisez memcmp() pour comparer ces 6 octets contre les 6 octets 'var'.

  2. Convertissez 'var' en une chaîne en utilisant snprintf() ou quelque chose de similaire, puis utilisez 'strcmp()' pour comparer cette chaîne à OldString.

Les deux mécanismes fonctionnent. Le mieux dépend de la façon dont vous allez utiliser les valeurs. Si vous avez principalement besoin de la forme binaire, alors l'option 1 est probablement meilleure; Si vous avez principalement besoin de la forme de chaîne, l'option 2 est préférable.

(Michael Burr donne un moyen précis d'utiliser snprintf(), mais en théorie, vous devriez vérifier la valeur de retour pour vous assurer qu'il se comportait correctement.)