【问题标题】:Convert HEX MAC-Address to WCHAR Array in C/C++ on a WinCE 6 Device using wprintf()使用 wprintf() 在 WinCE 6 设备上将 HEX MAC 地址转换为 C/C++ 中的 WCHAR 数组
【发布时间】:2021-03-18 14:24:41
【问题描述】:

最近几天,我一直在搜索和阅读几十个与我的问题相似的问题,但我还没有设法找到任何解决方案。

考虑以下简单的场景:

我正在为在 Windows CE 6.0 上运行的 HMI 设备编写 C/C++ 应用程序。为了使我们的自定义源工作,我们必须使用 VS 05 作为环境。 我必须将 MAC 地址存储到 .ini 文件并从中读取它并不时打印它,因此我需要能够将 6 字节 MAC 从十六进制转换为字符串并返回。

环境迫使我使用 WCHAR 而不是通常的字符。

MAC 保存在自己的结构中,由蓝牙 API 提供:

typedef struct bd_addr_t
{
     uint8_addr[6];
}bd_addr;

所以,我一直在尝试将相应的十六进制值写入缓冲区 wchar 数组,如下所示:(始终为 13 长,MAC 中 6*2 位为 12,'\0'delimiter 为 1)

void MacToString(bd_addr *address, WCHAR *macString)
{
    macString[12] = L'\0';
    for(int i = 5; i >= 0; i--)
    {
        wprintf(macString + i*2, L"%02X", address->addr[i]);
    }
}

我也尝试使用&macString[i + 2] 访问字符串,但我似乎无法将任何内容放入字符串中。仅打印出 wprintf(L"%02X", address->addr[i]) 给了我正确的字符串 sn-ps 所以我尝试存储 WCHAR 数组的方式似乎不正确。

如何将 uint_8s 存储为 WCHAR 字符串中的 2 位十六进制值?

【问题讨论】:

  • 您可以访问std::stringstream (<sstream>) 和std::hex 吗?
  • 很遗憾,我没有。如果我有的话,这会更容易、更直接。

标签: c++ c printf windows-ce wchar


【解决方案1】:

在您的示例中,您将 wprintf 与目标缓冲区一起使用,我认为您需要 swprintf。 wprintf 将使用您的 macString 中的任何内容作为格式,并且您的格式将是上面所写的参数。

【讨论】:

  • 在我的 for 循环中进行此更改后,它现在看起来像这样:for(int i = 5; i >= 0; i--) { swprintf(&macString[i * 2], L"%02X", address->adrr[i]); } 但我的 WCHAR 数组似乎仍然是空的。我错过了什么?使用macString + i * 2 访问数组时也不起作用
  • 更新:我必须纠正自己。我现在只有最后一个八位位组的值为address->addr[0],但没有其他八位位组。我似乎也无法调试代码,因为 VS 告诉我我没有可用于 swprintf 部分的源代码...
【解决方案2】:

我没有想到 MAC 是如何在结构中向后保存的,所以我使用以下代码让它工作:

void MacToString(bd_addr *address, WCHAR *macString)
{
    int strCount = 0;
    macString[13] = L'\0';

    for(int i = 5; i >= 0; i--)
    {
        swprintf(&macString[strCount * 2], L"%02X", address->addr[i]);
        strCount++;
    }
}

【讨论】:

    猜你喜欢
    • 2016-07-26
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2022-08-17
    相关资源
    最近更新 更多