我有一个简单的函数,它将变量“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的新手,只是想写一个简单的小工具......它比预期的要长。
答案 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)
您有两个主要选择:
将全局OldString存储(或转换)为6字节值的数组,然后使用memcmp()
将这6个字节与'var'中的6个字节进行比较。
使用snprintf()或类似的东西将'var'转换为字符串,然后使用'strcmp()'再次比较该字符串OldString。
这两种机制都有效。哪个更好取决于您将如何使用这些值。如果你主要需要二进制形式,那么选项1可能更好;如果你主要需要字符串形式,则选项2更好。
(Michael Burr提供了一种使用snprintf()
的准确方法,但理论上你应该检查它的返回值以确保它的行为正确。)