2010-02-04 119 views
0

我有一个简单的函数,它传递一个变量“var”作为u_char数组。我毫不费力地打印这个数组。存储/比较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 

但我一直在敲打我的头靠在墙上,整天只是想保存这些“变种”的输出为字符串。我试过strcpy,我试着用for循环循环,我尝试了一切,我可以从谷歌从malloc找到全局声明,而不是将值传递给函数。

任何帮助表示赞赏。我对C完全陌生,只是试图写一个简单的小工具......它比想象的要长。

+0

你应该告诉我们更多关于什么样的数据结构的'getCurrentMacAddress'店它的数据。要比较C中的字符串,你需要'strcmp'。比较运算符是'==',而不是'=',btw,'global'应该是'char *'。也许你应该向我们展示一些真实的代码! :-) – 2010-02-04 06:50:59

+0

抱歉 - 我在提出一般问题时倾向于使用伪代码。我真的必须阻止这一点。 – 2010-02-04 08:17:22

回答

3

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

我不能说我多么感恩 - 我一直在这个方面太久了。谢谢你,谢谢你,谢谢你。 – 2010-02-04 06:59:08

+0

+1正确猜测OP的想法。 – 2010-02-04 07:02:35

1

你有两个主要选择:

  1. 商店(或转换)全球OldString到6个字节值的数组,然后用memcmp()那些6个字节对在6个字节比较“变种”。

  2. 使用snprintf()或类似的东西将'var'转换为字符串,然后使用'strcmp()'来比较该字符串是否为OldString。

两种机制都起作用。哪个更好取决于你将如何使用这些值。如果你主要需要二进制形式,那么选项1可能会更好;如果您主要需要字符串表单,则选项2会更好。

(迈克尔·伯尔给出了使用snprintf(),虽然从理论上讲,你应该检查返回值,以确保其正常行为的准确的方法。)