簡體   English   中英

將十六進制值保存到C ++字符串

[英]Saving hex values to a C++ string

我有一個簡單的問題,但無法在互聯網上找到答案。 我正在使用Windows的本地WiFi API並嘗試獲取接入點的MAC。

在WLAN_BSS_ENTRY類型的結構中,有一個名為dot11Bssid的字段,它基本上是一個包含6個無符號字符的數組。

我想要做的是將MAC地址放在std :: string中,如下所示:'AA:AA:AA:AA:AA:AA'。

我可以像這樣打印地址:

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

但我無法找到將此值移動到具有上述格式的字符串的方法。

如果你想知道為什么我想在字符串中使用它,我需要幫助,我需要將它與以這種方式格式化的字符串進行比較。 在此先感謝您的時間。

使用帶有IO操縱器的 std::ostringstream (已經注釋)。 例如

#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;
}

我假設您使用類似於sprintf的東西,std :: string類包含一個轉換構造函數,用於從c-strings移動到std :: strings。 所以你可以sprintf(),如果這是你正在尋找的。 您正在使用wchar類型,因此您可能需要考慮使用swprintf()。

類似的問題: std :: string格式化如sprintf

使用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 );

使用類似的東西

int value = 0x1234;
char * temp = new char[100];
sprintf(temp, "0x%x", value);
std::string target(temp);
delete[] temp;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM