gpt4 book ai didi

C - 格式化MAC地址

转载 作者:行者123 更新时间:2023-12-04 03:01:12 25 4
gpt4 key购买 nike

我目前正在解析一些 MAC 地址。我得到了一个不包含前导零的输出(就像这样)。

char* host = "0:25:25:0:25:25";

我想这样格式化

char* host = "00:25:25:00:25:25";

最简单的方法是什么?

对于那些想知道的人,我正在使用 libpcap 库。

最佳答案

我可能遗漏了问题中的某些内容。假设您知道它是一个有效的 MAC,并且输入字符串因此是可解析的,您是否考虑过像这样简单的事情:

char* host1 = "0:25:25:0:AB:25";
char *host2 = "0:1:02:3:0a:B";
char result[19];
int a,b,c,d,e,f;

// the question sample
if (sscanf(host1, "%x:%x:%x:%x:%x:%x", &a,&b,&c,&d,&e, &f) == 6)
sprintf(result, "%02X:%02X:%02X:%02X:%02X:%02X", a,b,c,d,e,f);
printf("host1: %s\n", result);

// a more daunting sample
if (sscanf(host2, "%x:%x:%x:%x:%x:%x", &a,&b,&c,&d,&e, &f) == 6)
sprintf(result, "%02X:%02X:%02X:%02X:%02X:%02X", a,b,c,d,e,f);
printf("host2: %s\n", result);

输出

host1: 00:25:25:00:AB:25
host2: 00:01:02:03:0A:0B

显然,对于极度偏执的人,您会希望确保 a-f 都小于 255,这可能更可取。在性能不是关键问题的情况下,我更喜欢这个的根本原因是您在问题中可能没有考虑的许多事情。它处理所有的

  1. “n:” 的前导值,其中n任何 十六进制数字;不只是零。示例:“5:”“0:”
  2. ":n:" 的中间值,同样在与上述 (1) 相同的条件下。示例:":A:"":0:"
  3. “:n” 的尾部值。再一次,在与上述 (1) 相同的条件下。示例:":b"":0"
  4. 阅读时与十六进制数字无关;它适用于大写和小写数字字符。
  5. 最重要的是,如果您的输入字符串已经正确格式化,则不执行任何操作(大写十六进制值除外)。

关于C - 格式化MAC地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14534780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com