2014-08-28 67 views
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地址包含前面的零?

最终数组写入文件。

更新:Printing leading 0's in C?

当我试图打印的MAC地址的结果是相同的如上述实施例中给出,但是当我使用%02x(I得知这从上面的链接)的问题得到解决,当我想要打印。

因为我想将内容保存到一个数组,有没有像printf%02x技巧。

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

回答

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(),因为您需要知道所有内容(您迄今为止创建的字符串以及要添加的字符串)的时间长度,以确保您不会溢出存储空间。

+0

谢谢队友。它的工作! – user3406774 2014-08-29 07:14:36

0

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

+0

包含mac地址的数组的数据类型是unsigned char [6] {包含十六进制数据},而我的最终数组也是unsigned char数组。 – user3406774 2014-08-28 13:20:04