【问题标题】:Converting wchar to string and push in a vector (C/C++) [closed]将 wchar 转换为字符串并推入向量(C/C++)[关闭]
【发布时间】:2012-07-26 03:17:17
【问题描述】:

我只想将我的 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;

【问题讨论】:

  • 您每次都需要一个新字符串...您在循环中尝试过tmp = wstring(m_device_info.Address); 吗?
  • m_device_info.Address.rgBytes 真的是字符数组还是数字数组?
  • 如果你使用wchars,你可能也应该使用wstring——那么你就不需要“缩小”转换。
  • 你能添加你正在使用的结构吗? m_device_info

标签: c++ c string vector wchar


【解决方案1】:

首先,如果您询问有关编译错误的问题,总是将错误放在问题中。

其次,您遇到的错误是因为您有一个包含wstringvector,但尝试推送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());

【讨论】:

  • 如果您遇到错误,请不要编辑答案来说明。而是将其添加为评论。关于你得到的错误,你是否包括&lt;sstream&gt;
  • 对此我很抱歉!好的,现在我只有一个新错误。错误出现在 tmp
  • 我只有这一个错误!请在这里帮助我:)
  • @user1557170 啊,我应该使用rgBytes 作为数组。编辑答案以纠正该问题。
  • 首先非常感谢!我唯一的问题是我的 tmp 中的值不正确。因为我正在搜索指定的 wstring。如果我在调试模式下查看,我会在我的 vec 中看到另一个值“24:34:133:216:3:152”......我已经使用搜索算法编辑了我的代码。往下看
猜你喜欢
  • 2012-03-28
  • 2015-05-03
  • 2023-03-27
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 2014-03-15
相关资源
最近更新 更多