前面的零被忽略

时间:2014-08-28 13:14:24

标签: c string aircrack-ng

我正在修改airodump-ng以构建自定义应用程序。

我需要这种格式的输出

{AP Mac 1, Station Mac 1},{AP Mac 2, Station Mac 2},...............

为此,我遍历struct ST_INFO并使用多个strcat调用我以上述格式生成数组。

当MAC地址包含前面的零时,会出现问题,这会导致数据损坏

eg: 0A1B23443311 is saved as A1B23443311
eg: 001B3311ff22 is saved as   1B3311ff22 ( The 0s have been ignored)

当MAC地址包含前面的零时,我应该怎么做才能正确保存数据?

最终数组被写入文件。

更新:Printing leading 0's in C?

当我尝试打印MAC地址时,结果与上面示例中给出的结果相同,但是当我使用%02x时(我从上面的链接中了解到它),当我想要打印时,问题就解决了。

因为,我想将内容保存到数组中,是否有像{02}的{02}这样的技巧。

struct ST_INFO包含printf(MAC地址以十六进制格式存储),我的最终数组也是unsigned char st_mac[6]数组。

2 个答案:

答案 0 :(得分:0)

如果所有地址都有固定长度,只需在追加之前检查长度。如果是 长度< fixed_length,在长度的零数之间追加差值。

答案 1 :(得分:0)

有多种方法可以做,但如果您使用的是snprintf()或其中一位亲戚,%02x(或%02X,或%.2x或{ {1}})格式将非常有用。例如:

%.2X

(通常情况下,使用const unsigned char *st_mac = st_info_struct.st_mac; unsigned char buffer[13]; for (int i = 0; i < 6; i++) sprintf(&buffer[2*i], "%.2X", st_mac[i]); 是一个好主意;在这里,它是不必要的过度杀伤,但这不会是错误的。)

您不应该使用多个snprintf()调用来构建字符串。这导致了二次算法。如果字符串很长(比如千字节或更多),这就开始变得重要了。你也不应该使用strcat(),因为你需要知道一切都是多久(你到目前为止创建的字符串,以及你要添加的字符串),这样你就可以确保不溢出你的存储空间。