Преобразование 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());