-1

私はこれを持っています:

#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <Iphlpapi.h>
#include <Assert.h>
#include <sstream>

#pragma comment(lib, "iphlpapi.lib")

using namespace std;

// Prints the MAC address stored in a 6 byte array to stdout
static void PrintMACaddress(unsigned char MACData[])
{

    printf("%02X-%02X-%02X-%02X-%02X-%02X", 
        MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);

}

// Fetches the MAC address and prints it
static void GetMACaddress(void)
{
    IP_ADAPTER_INFO AdapterInfo[16];            // Allocate information for up to 16 NICs
    DWORD dwBufLen = sizeof(AdapterInfo);       // Save the memory size of buffer

    DWORD dwStatus = GetAdaptersInfo(           // Call GetAdapterInfo
        AdapterInfo,                            // [out] buffer to receive data
        &dwBufLen);                             // [in] size of receive data buffer
    assert(dwStatus == ERROR_SUCCESS);          // Verify return value is valid, no buffer overflow

    PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;// Contains pointer to current adapter info
    do {
        PrintMACaddress(pAdapterInfo->Address); // Print MAC address
        pAdapterInfo = pAdapterInfo->Next;      // Progress through linked list
    }
    while(pAdapterInfo);                        // Terminate if last adapter
}

    int _tmain(int argc, _TCHAR* argv[])
    {
    char mac[100];

        GetMACaddress(); // output is 00-19-D7-53-2D-14

    std::stringstream buffer;
    buffer << "Text" << std::endl;
    cout << buffer.str();
        return 0;
    }

私の質問は、関数GetMACaddress();出力を変数に割り当てる方法です。これ:mac = GetMACaddress(); // output is 00-19-D7-53-2D-14うまくいきませんでした。お願い助けて。ありがとうございました。

返される MAC アドレスのデータ型は ですunsigned char

4

3 に答える 3

0

関数PrintMACaddressは MAC アドレスを出力します。unsigned char MACData[]MACアドレスを出力するのではなく、受信して返す同様の関数が必要です。

// Converts the MAC address stored in a 6 byte array to a string
std::string ConvertMACaddressToString(unsigned char MACData[])
{
    ...
}

printfそれを実装するには、まず次のように置き換えsprintfます。

char result[18]; // 18 bytes are just enough to hold the MAC address
sprintf(result, "%02X-%02X-%02X-%02X-%02X-%02X", 
    MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);

次に、関数から値を返します。

return result;
于 2012-12-03T18:15:01.750 に答える
0

stdout以下のように、バッファを文字列ストリームにリダイレクトする必要があります。

stringstream ss;
streambuf* old = std::cout.rdbuf(ss.rdbuf()); // redirect stdout, and also save the old one

GetMACAddress();

string theStr = ss.str();
cout << theStr << endl;

// when you are done, redirect back to the "real" stdout
cout.rdbuf(old);
于 2012-12-03T17:10:32.120 に答える
0

返される MAC アドレスのデータ型が の場合、unsigned charそれを格納できます。

unsigned char output = GetMACaddress() ;

文字列の場合は、std::string返された MAC アドレスを格納するために使用します00-19-D7-53-2D-14

std::string output = GetMACaddress() ;

他のタイプの場合は、実行時にコンパイラーに決定させることができます。C++11 を使用している場合は、autoまたはを使用できますdecltype

auto return_val = GetMACaddress() ;
于 2012-12-03T17:06:39.053 に答える