首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >忽略前面的零

忽略前面的零
EN

Stack Overflow用户
提问于 2014-08-28 13:14:24
回答 2查看 123关注 0票数 0

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

我需要这种格式的输出

代码语言:javascript
运行
复制
{AP Mac 1, Station Mac 1},{AP Mac 2, Station Mac 2},...............

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

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

代码语言:javascript
运行
复制
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] (unsigned char st_mac[6]地址以十六进制格式存储),我的最后一个数组也是unsigned char数组。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-28 14:04:31

有多种方法可以实现,但是如果您使用的是snprintf()或其亲属之一,则%02x (或者%02X%.2x%.2X)格式将是有用的。例如:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2014-08-28 13:18:11

如果所有的地址都有固定的长度,只需在附加之前检查长度。如果

长度< fixed_length,附加长度的零数之间的差异。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25549737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档