在 WinCE 6 设备上使用 wprintf() 将 HEX MAC-Address 转换为 C/C++ 中的 WCHAR 数组

Convert HEX MAC-Address to WCHAR Array in C/C++ on a WinCE 6 Device using wprintf()

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

考虑以下简单场景:

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

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

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

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

所以,我一直在尝试做的是将相应的十六进制值写入缓冲区 wchar 数组,如下所示:(总是 13 长,12 代表 MAC 中的 6*2 位,1 代表'[=14=]'分隔符)

void MacToString(bd_addr *address, WCHAR *macString)
{
    macString[12] = L'[=13=]';
    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]) 给出了正确的字符串片段,因此我尝试存储 WCHAR 数组的方式似乎不正确。

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

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

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

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

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