Преобразование wchar в строку и вставка вектора (C/C++)

Я просто хочу преобразовать мой массив wchar в строку и вставить его в мой строковой вектор. Мои решения закомментированы, потому что это не работает. Я получаю ошибку, что мой вектор перегружен. Код ниже:

  vector<wstring> vec;
  string tmp;
  int n;
  int m_device_id = 0;
  do {
    m_device_id++;
    tmp="";
    wprintf(L"\tDevice %d:\r\n", m_device_id);
    wprintf(L"\t\tName: %s\r\n", m_device_info.szName);
    wprintf(L"\t\tAddress: %02x:%02x:%02x:%02x:%02x:%02x\r\n", m_device_info.Address.rgBytes[0], m_device_info.Address.rgBytes[1], m_device_info.Address.rgBytes[2], m_device_info.Address.rgBytes[3], m_device_info.Address.rgBytes[4], m_device_info.Address.rgBytes[5]);
    wprintf(L"\t\tClass: 0x%08x\r\n", m_device_info.ulClassofDevice);

wostringstream tmp;
    for (int i = 0; i < 6; i++)
    {
     tmp << m_device_info.Address.rgBytes [i];

    // Append the colon, but not after the last
    if (i < 5)
    tmp << L':';
   }
    vec.push_back(tmp.str());

  } while(BluetoothFindNextDevice(m_bt_dev, &m_device_info));


  vector<wstring>::iterator it = find(vec.begin(), vec.end(), wstring(L"18:22:85:d8:03:98"));
  if(it != vec.end()) {
  cout << "Found it" << '\n';
  } else {
  cout << "Not found" << '\n';
 }
  BluetoothFindDeviceClose(m_bt_
 }while(BluetoothFindNextRadio(&m_bt_find_radio, &m_radio));

===============================================

Структура информации об устройстве

typedef struct _BLUETOOTH_DEVICE_INFO {
 DWORD             dwSize;
 BLUETOOTH_ADDRESS Address;
 ULONG             ulClassofDevice;
 BOOL              fConnected;
 BOOL              fRemembered;
 BOOL              fAuthenticated;
 SYSTEMTIME        stLastSeen;
 SYSTEMTIME        stLastUsed;
 WCHAR             szName[BLUETOOTH_MAX_NAME_SIZE];
} BLUETOOTH_DEVICE_INFO;

1 ответ

Прежде всего, если вы задаете вопрос об ошибках компиляции, всегда ставьте ошибки в вопросе.

Во-вторых, вы получаете ошибки, потому что у вас есть vector содержащий wstring, но попробуйте нажать переменную типа string,

В-третьих, судя по вашему коду, массив, из которого вы хотите создать строку, - это не массив символов, а массив чисел. Вы можете создать строку из них, используя, например, std::wostringstream:

std::wostringstream tmp;
for (int i = 0; i < 6; i++)
{
    tmp << std::hex << std::setw(2) << std::setfill(L'0')
        << m_device_info.Address.rgBytes[i];

    // Append the colon, but not after the last
    if (i < 5)
        tmp << L':';
}

vec.push_back(tmp.str());
Другие вопросы по тегам