C++ 读取 char* 中的注册表字符串值

标签 c++ unicode registry char

我正在读取这样的注册表值:

char mydata[2048];
DWORD dataLength = sizeof(mydata);
DWORD dwType = REG_SZ;

..... open key, etc
ReqQueryValueEx(hKey, keyName, 0, &dwType, (BYTE*)mydata, &dataLength);

我的问题是,在此之后,我的数据内容看起来像:[63, 00, 3A, 00, 5C, 00...],也就是说,这看起来像一个 unicode?!?!。

我需要以某种方式将其转换为普通字符数组,不带这些 [00],因为它们使我拥有的简单日志记录功能失败。 IE。如果我这样调用:WriteMessage(mydata),它只输出“c”,这是注册表中的第一个字符。我到处都调用了这个日志记录函数,所以我最好不要修改它,而是以某种方式“修复”注册表值。这是日志函数:

void Logger::WriteMessage(const char *msg)
{
 time_t now = time(0);
 struct tm* tm = localtime(&now);
 std::ofstream logFile;

 logFile.open(filename, std::ios::out | std::ios::app);

 if ( logFile.is_open() )
 {
  logFile << tm->tm_mon << '/' << tm->tm_mday << '/' << tm->tm_year << ' ';
  logFile << tm->tm_hour << ':' << tm->tm_min << ':' << tm->tm_sec << "> ";
  logFile << msg << "\n";
  logFile.close();
 }
}

最佳答案

关于C++ 读取 char* 中的注册表字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2480502/

相关文章:

Docker 将间歇性故障推送到 kubernetes 上的私有(private) docker 注册表(docker-desktop)

c++ - 如果输入值超过目标类型大小,为什么 cin 不重新提示?

使用 DictWriter for utf-8 时出现 UnicodeEncodeErrors

java - 是否有一种标准/完善的方法来序列化 Java 类以在 C++ 中使用,而无需使用 XML 或 JSON 等标记格式?

Python - 从列表中删除元素(外来字符)

python - 使用 'utf-8' 解码但错误显示 Unicode 编码错误?

windows - Windows 启动时启动我的应用程序(所有版本的 Windows)?

windows - Visual Studio 安装项目 - 每用户注册表设置

c++ - 我可以使用 operator== 作为指针吗?

c++ - OpenCV 尝试将 ARtoolkit 与 OpenCV 集成