使用无符号字符设置文本格式
text formatting with 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:%02xn",
(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 地址保存为变量中的字符串的方法mac_as_string。
关于文本格式和创建字符串变量,最简单的方法是使用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++文本文件时是否有效?
- 为什么使用 C++ 中的类对象写入文件中的数据以非文本格式存储?
- QT 标签 setText() 同时保留文本格式
- 输出使用 cout 转换为 ASCII 的文本时输出格式不正确,C++
- 如何设计对象以不同方式设置文本格式
- 使用文本格式来记录QT
- 如何将percision格式复制到文本文件
- 使用无符号字符设置文本格式
- 阅读文本格式不一致
- 要求文本编辑,文本格式
- 即使不满足条件,也会重置文本文件.(C++)
- 将大型数据文件拆分为多个小文件(文本格式)
- 在 C++/Qt 中以文本格式序列化数据结构
- 如何在解析文本格式的 protobuf 消息时忽略错误的字段
- C++:将输出文本格式化为.doc/.docx/.rtf(第2部分)
- 将输出文本格式化为.doc/.docx
- C++ 使用 setw 的文本格式不适用于 QT 的 QTextEdit
- QTextEdit显示的块中图像后的文本格式
- 从流中读取十六进制文本格式0x
- QProgressBar文本格式为时间