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

时间:2010-03-19 20:50:42

标签: 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);

我的问题是,在此之后,mydata内容看起来像:[63,00,6A,00,5C,00 ...],即这看起来像一个unicode?!?!。

我需要以某种方式将其转换为普通的char数组,没有这些[00],因为它们失败了我的简单日志功能。即如果我这样调用: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();
 }
}

2 个答案:

答案 0 :(得分:3)

查看WideCharToMultiByte()。

答案 1 :(得分:2)

这里有两个解决方案:

  1. 将代码更改为wchar_t mydata[2048];。由于底层代码是UNICODE,您将获得最佳性能。
  2. 如果您不关心此区域的表现,请使用RegQueryValueExA()