c++ - 使用 unsigned char 的文本格式

标签 c++ text-formatting unsigned-char

我是 C++ 的新手,我的问题是我找到了一种方法来使用 printf 在输出中进行文本格式化,但是我找不到在字符串变量中正确格式化文本的方法.我的最终目标是将当前 mac 地址保存在一个字符串变量中,并将其与另一个变量进行比较。 这是我的代码:

#include <sys/socket.h>
#include <sys/ioctl.h>
#include <linux/if.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <iostream>

int main()
{
  struct ifreq s;
  int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
  char mac[6];
  int ret;
  strcpy(s.ifr_name, "enp5s0");
  if (0 == ioctl(fd, SIOCGIFHWADDR, &s)) {
    printf("%02x:%02x:%02x:%02x:%02x:%02x\n",
      (unsigned char) s.ifr_hwaddr.sa_data[0],
      (unsigned char) s.ifr_hwaddr.sa_data[1],
      (unsigned char) s.ifr_hwaddr.sa_data[2],
      (unsigned char) s.ifr_hwaddr.sa_data[3],
      (unsigned char) s.ifr_hwaddr.sa_data[4],
      (unsigned char) s.ifr_hwaddr.sa_data[5]);
    if (mac_as_string == "28:d2:44:55:97:7f") {
    }
    return 0;
  }
  return 1;
}

我找不到在 mac_as_string 变量中将 mac 地址保存为字符串的方法。

最佳答案

关于文本格式和创建字符串变量,最简单的方法是使用 std::ostringstream :

std::ostringstream macbuilder;

macbuilder << std::hex 
           << std::setw(2) << unsigned(s.ifr_hwaddr.sa_data[0]) << ':'
           << std::setw(2) << unsigned(s.ifr_hwaddr.sa_data[1]) << ':'
           << std::setw(2) << unsigned(s.ifr_hwaddr.sa_data[2]) << ':'
           << std::setw(2) << unsigned(s.ifr_hwaddr.sa_data[3]) << ':'
           << std::setw(2) << unsigned(s.ifr_hwaddr.sa_data[4]) << ':'
           << std::setw(2) << unsigned(s.ifr_hwaddr.sa_data[5];
std::string macaddr = macbuilder.str();

但是如果你只是想拥有一个与另一个变量相当的变量std::array<uint8_t,6>是要走的路:

std::array<uint8_t,6> macaddr {
    s.ifr_hwaddr.sa_data[0] ,
    s.ifr_hwaddr.sa_data[1] ,
    s.ifr_hwaddr.sa_data[2] ,
    s.ifr_hwaddr.sa_data[3] ,
    s.ifr_hwaddr.sa_data[4] ,
    s.ifr_hwaddr.sa_data[5] ,
    };

如前所述std::array提供 operator==() 您可以简单地使用它来与以相同方式创建的另一个变量进行比较。

关于c++ - 使用 unsigned char 的文本格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43952411/

相关文章:

c++ - std::vector<int>::clear,常数时间?

c - 如何将 8 字节十六进制枚举值添加到 unsigned char 指针?

C++ 从无符号字符数组创建 GUID

java - 如何更改字符串内的部分文本格式(颜色,sizebold斜体)?

ios - 截断 UILabel 中的部分文本

awk - 将(各种大小的)行拆分为两列,将第一个单词保留在一列中

c++ - 当我需要一个字符串时,我可以用 unsigned char* 做什么?

c++ - 有没有办法知道用户是否在控制面板中启用了 "single click to open an item"?

c++ - 修复错误 : taking address of temporary without changing codes

C++:函数指针是否可以在不看函数名的情况下追溯到编译前的原始函数?