在 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++;
}
}
最近几天,我一直在搜索和阅读 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++;
}
}