3

簡単な質問がありますが、インターネットで答えを見つけることができませんでした。WindowsのネイティブWiFiAPIを使用していて、アクセスポイントのMACを取得しようとしています。

タイプWLAN_BSS_ENTRYの構造内には、基本的に6つのunsignedcharの配列であるdot11Bssidという名前のフィールドがあります。

私がやりたいのは、次のようにstd :: stringにMACアドレスを含めることです:'AA:AA:AA:AA:AA:AA'。

私はこのように住所を印刷することができます:

for (k = 0; k < 6; k++) 
{
    wprintf(L"%02X", wBssEntry->dot11Bssid[k]);
}

しかし、この値を上記の形式の文字列に移動する方法を見つけることができません。

なぜこれを文字列に入れたいのか疑問に思われる場合は、そのようにフォーマットされた文字列と比較する必要があります。よろしくお願いします。

4

4 に答える 4

14

std::ostringstream(すでにコメントされているように)IOマニピュレータで使用します。

#include <iostream>
#include <sstream>
#include <ios>
#include <iomanip>
#include <string>

int main()  
{
    unsigned char buf[] = { 0xAA, 0xD1, 0x09, 0x01, 0x10, 0xF1 };

    std::ostringstream s;
    s << std::hex << std::setfill('0') << std::uppercase
      << std::setw(2) << static_cast<int>(buf[0]) << ':'
      << std::setw(2) << static_cast<int>(buf[1]) << ':'
      << std::setw(2) << static_cast<int>(buf[2]) << ':'
      << std::setw(2) << static_cast<int>(buf[3]) << ':'
      << std::setw(2) << static_cast<int>(buf[4]) << ':'
      << std::setw(2) << static_cast<int>(buf[5]);

    std::cout << "[" << s.str() << "]\n";

    return 0;
}
于 2012-06-24T21:33:04.553 に答える
1

sprintfに似たものを使用すると仮定します。std::stringクラスには、c-stringsからstd::stringsに移動するための変換コンストラクターが含まれています。だから、それがあなたが探しているものなら、あなたはsprintf()をすることができます。ただし、wcharタイプを使用しているため、代わりにswprintf()を検討することをお勧めします。

同様の質問: sprintfのようなstd::stringフォーマット

于 2012-06-24T21:24:13.940 に答える
1

stringstreamを使用しても問題はありませんが、swprintfを意識せずにwprintfを知っているのは驚くべきことです。printfは、printfやwprintfだけでなく、関数のファミリー全体です。

​int printf( const char *format, ... );​
int fprintf( FILE *stream, const char *format, ... );
int sprintf( char *buffer, const char *format, ... );
int snprintf( char *buffer, int buf_size, const char *format, ... );
int wprintf( const wchar_t* format, ... );
int fwprintf( FILE *stream, const wchar_t* format, ... );
int swprintf( char *buffer, const wchar_t* format, ... );
​int vprintf( const char *format, va_list vlist );​
int vfprintf( FILE *stream, const char *format, va_list vlist );
int vsprintf( const char *buffer, const char *format, va_list vlist );
int vsnprintf( char *buffer, int buf_size, const char *format, va_list vlist );
int vwprintf( const wchar_t* format, va_list vlist );
int vfwprintf( FILE* stream, const wchar_t* format, va_list vlist );(2) 
int vswprintf( const wchar_t* buffer, const wchar_t* format, va_list vlist );
于 2012-06-24T22:11:30.993 に答える
0

そのようなものを使用してください

int value = 0x1234;
char * temp = new char[100];
sprintf(temp, "0x%x", value);
std::string target(temp);
delete[] temp;
于 2014-11-25T08:19:42.393 に答える