0

我正在修改 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 地址包含前面的零时,我应该怎么做才能正确保存数据?

最终的数组被写入文件。

更新:在 C 中打印前导 0?

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

因为,我想将内容保存到一个数组中,有没有像 %02x for printf.

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

4

2 回答 2

0

有多种方法可以做,但如果您使用snprintf()或使用它的亲戚之一,%02x(或可能%02X,或%.2x%.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()调用来构建字符串。这导致了二次算法。如果字符串很长(比如千字节或更多),这很重要。您也不应该使用strcat(),因为您需要知道所有内容的长度(到目前为止您创建的字符串,以及您要添加到其中的字符串),以便确保您不会溢出存储空间。

于 2014-08-28T14:04:31.807 回答
0

如果所有地址都有固定长度,只需在添加之前检查长度即可。如果
长度 < fixed_length ,则附加长度的零个数之间的差异。

于 2014-08-28T13:18:11.307 回答