c - 前面的零被忽略

标签 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 (我从上面的链接了解到它)时,问题就解决了想要打印。

因为我想将内容保存到数组中,有没有像 printf 的 %02x 这样的技巧。

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

最佳答案

有多种方法可以做到这一点,但如果您使用 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() 因为您需要知道所有内容的长度(到目前为止您创建的字符串以及您要添加到其中的字符串),以便您可以确保您的存储空间不会溢出。

关于c - 前面的零被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25549737/

相关文章:

c - if 语句中的字符串比较不起作用

regex - 从 R 中的字符串中删除所有特殊字符?

python - Pandas :如何选择具有特定单词的行

database - 如何从搜索查询中搜索子项?

aircrack-ng - 错误数据包不包含 EAPOL 数据;无法处理此 AP

c - 一行C代码的逻辑

C、指向函数转换的指针,代码不清晰

c - 这个 Ocaml 类型定义在其 C stub 中会是什么样子?

archlinux - 气裂 channel : -1 Issue on Arch Linux

macos - airmon-ng 在终端中不起作用(找不到命令)