gpt4 book ai didi

c++ - 打印我的获取 MAC 地址函数的 std::string 时出现意外输出?

转载 作者:搜寻专家 更新时间:2023-10-31 00:32:17 28 4
gpt4 key购买 nike

使用 VC++,当我获得本地系统的 MAC 地址时,它会给我一个十六进制代码。我需要将其转换为 std::string 以便我可以在我的代码中的其他地方使用它。但我无法正确获取它。我知道我一定错过了一个关于 C++ 中字符串的非常基本的概念,请在这里帮助我。

这是我的代码:-

void getMACAddr()
{
CCLOG("getMACAddr 1");
IP_ADAPTER_INFO *info = NULL, *pos;
DWORD size = 0;

GetAdaptersInfo(info, &size);

info = (IP_ADAPTER_INFO *)malloc(size);

GetAdaptersInfo(info, &size);
CCLOG("getMACAddr 2");

for (pos = info; pos != NULL; pos = pos->Next)
{
std::stringstream ss;
CCLOG("getMACAddr 3");
CCLOG("\n%s\n\t", pos->Description);
CCLOG("HEX = :%2.2x", pos->Address[0]);
ss << pos->Address[0];
for (int i = 1; i < pos->AddressLength; i++)
{
CCLOG("HEX = :%2.2x", pos->Address[i]);
ss << pos->Address[i];
}
std::string tS = ss.str();
CCLOG("%s", tS.c_str());
}
free(info);


}

这是我的输出:-

getMACAddr 1
'prog.exe' (Win32): Loaded 'C:\Windows\SysWOW64\dhcpcsvc.dll'.Cannot find or open the PDB file.
getMACAddr 2
getMACAddr 3

Bluetooth Device (Personal Area Network)

HEX = :08
HEX = :3e
HEX = :8e
HEX = :aa
HEX = :37
HEX = :52
tS == >??7R

如您所见。

输出的最后一行(“tS == >??7R”)很奇怪。

我应该怎么做才能在单个字符串中获取整个地址?

最佳答案

IP_ADAPTER_INFO::Address 是一个 BYTE 数组,因此您可能希望将字节转换为十六进制表示法,而不是将它们像字符一样塞入字符串中.

像这样:

#include <iomanip>

ss << std::hex << std::setfill('0') << std::setw(2);
for (int i = 0; i < pos->AddressLength; i++) {
ss << (int) pos->Address[i];
}
std::string tS = ss.str();

关于c++ - 打印我的获取 MAC 地址函数的 std::string 时出现意外输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31771245/

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