【问题标题】:Storing/Comparing u_char passed to function存储/比较传递给函数的 u_char
【发布时间】:2011-01-12 23:05:19
【问题描述】:

我有一个简单的函数,可以将变量“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 到全局声明在 google 上可以找到的所有内容,而不是将值传递给函数。

感谢任何帮助。我对C完全陌生,只是想写一个简单的小工具......它花费的时间比它应该的要长。

【问题讨论】:

  • 您应该告诉我们更多关于getCurrentMacAddress 将其数据存储在哪种数据结构中。要在C 中比较字符串,您需要strcmp。比较运算符是==,而不是=,顺便说一句,global 应该是char *。也许你应该给我们看一些真实的代码! :-)
  • 很抱歉——我在提出一般性问题时倾向于使用伪代码。我真的必须阻止它。

标签: c string variables char printf


【解决方案1】:

您有两个主要选择:

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

  2. 使用 snprintf() 或类似方法将“var”转换为字符串,然后使用“strcmp()”将该字符串与 OldString 进行比较。

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

(Michael Burr 给出了使用snprintf() 的准确方法,尽管理论上您应该检查它的返回值以确保它的行为正确。)

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我无法表达我的感激之情——我已经 ******** 搞这个太久了。谢谢谢谢谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多