存储/比较u_char传递给函数

时间:2010-02-04 06:47:36

标签: c string variables char printf

我有一个简单的函数,它将变量“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循环进行循环,我尝试了从malloc到全局声明的所有我可以找到的代替将值传递给函数。

感谢任何帮助。我完全是C的新手,只是想写一个简单的小工具......它比预期的要长。

2 个答案:

答案 0 :(得分: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]);

答案 1 :(得分:1)

您有两个主要选择:

  1. 将全局OldString存储(或转换)为6字节值的数组,然后使用memcmp()将这6个字节与'var'中的6个字节进行比较。

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

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

    (Michael Burr提供了一种使用snprintf()的准确方法,但理论上你应该检查它的返回值以确保它的行为正确。)