2012-12-03 83 views
-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

+0

使用'的std :: string'了点。 –

+2

'GetMACaddress()'的返回类型是什么? – Angew

+0

@Angew:'unsigned char'是数据类型 – sg552

回答

0

如果返回的mac地址的数据类型为unsigned char,则可以将其存储在其中。

unsigned char output = GetMACaddress() ; 

如果其字符的字符串,用std::string存储的MAC地址返回,如果像你说的模式00-19-D7-53-2D-14的输出的东西。

std::string output = GetMACaddress() ; 

如果是某种其他类型,则可以让编译器在运行时决定。如果您使用的是C++ 11,则可以使用autodecltype

auto return_val = GetMACaddress() ; 
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); 
+0

谢谢,但'GetMACAddress();'没有分配给任何变量? 'cout << theStr << endl; cout << theStr << endl; cout << theStr << endl;'这些是假设打印MAC地址3次,但没有工作? – sg552

+0

这会将'GetMACAddress()'的_return值赋给该变量。你想要的是它打印到控制台的字符串。我上面粘贴的代码将控制台(或者更确切地说,标准输出 - 也就是'stdout')重定向到'stringstream'。从那里,你使用'str()'方法得到字符串。 我建议您阅读有关标准输入/输出和stringstream的内容,以了解其工作原理。 –

+0

FWIW,这里是一个示例代码,其中包含一个精简版代码,以帮助您理解。 http://ideone.com/W5xnyV我会留给你弄清楚发生了什么。 –

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[]) 
{ 
    ... 
} 

要实现它,首先由sprintf更换printf

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;