【发布时间】: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