使用wprintf()在WinCE 6设备上用C/C++将HEX MAC地址转换为WCHAR阵列



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

考虑以下简单场景:

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

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

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

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

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

void MacToString(bd_addr *address, WCHAR *macString)
{
macString[12] = L'';
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'';
for(int i = 5; i >= 0; i--)
{
swprintf(&macString[strCount * 2], L"%02X", address->addr[i]);
strCount++;
}
}

最新更新