C++ 将LPBYTE转换为char*
在谷歌“Convert LPBYTE to char*”上搜索了两个小时后,我只找到了与“RegQueryValueExW”相关的结果 除了“RegQueryValueExW”函数外,没有人使用“LPBYTE” 我的问题出现在unicode和ASCII转换中,如果我使用RegQueryValueEx,它将为我提供所有正确的ASCII值,但从多国观点来看,这对我没有帮助 现在, 我有以下代码C++ 将LPBYTE转换为char*,c++,c,C++,C,在谷歌“Convert LPBYTE to char*”上搜索了两个小时后,我只找到了与“RegQueryValueExW”相关的结果 除了“RegQueryValueExW”函数外,没有人使用“LPBYTE” 我的问题出现在unicode和ASCII转换中,如果我使用RegQueryValueEx,它将为我提供所有正确的ASCII值,但从多国观点来看,这对我没有帮助 现在, 我有以下代码 char* GetStringRegKey(HKEY hKey, LPCWSTR strValueName
char* GetStringRegKey(HKEY hKey, LPCWSTR strValueName, char* strValue, char* strDefaultValue)
{
strValue = strDefaultValue;
char szBuffer[512];
DWORD dwBufferSize = sizeof(szBuffer);
ULONG nError;
LPCWSTR TempPassingString;
char* hostName;
nError = RegQueryValueExW(hKey, strValueName, 0, NULL, (LPBYTE)szBuffer, &dwBufferSize);
if (ERROR_SUCCESS == nError)
{
strValue = szBuffer;
}
USES_CONVERSION;
return strValue;
}
这将向我显示szBuffer数组,
这是正确的值。(注意“C”后的指针值)。
但当我将其分配给另一个字符数组strValue时,只有“C”显示为strValue的值
如下图所示
这可能是个愚蠢的问题,但我不明白我错在哪里。
请提供任何帮助、代码块或提示,将我的整个szBuffer转换为strValue。您看到在调用中传递NULL的第四个参数了吗?这就是类型,我建议您花些时间研究它返回的值,以及您可以期望的结果数据的数据格式。然后,我将研究同一函数的狭义版本,
RegQueryValueExA()
。您当前的返回字符串可能是typeREG_SZ
,因为您使用的是API的宽字符版本,所以字符串是Unicode。@SantoshDhanawade我没有说这是不匹配的。我说您使用的是宽字符版本的RegQueryValueEx
,它将为REG_SZ、REG_MULTI_SZ等类型的项目返回Unicode值。该函数始终需要一个LPBYTE参数,但为字符串类型返回的数据将是Unicode。如果您想要狭义表示,您必须使用RegQueryValueExA,或者在提取后使用wideChartMultiByte()
转换为类似于CP\u UTF8的内容。@类似的内容,是的。关于如何在web上使用RegQueryValuex,这里有成千上万的例子。花点时间看看它是如何使用的,最重要的是,阅读文档。它真的可以回答你的任何问题。你真的应该试着理解RegQueryValueExW()
和RegQueryValueExA()
之间的区别,以及后缀A
和W
的函数之间的区别!在示例中显示的reg值是放置在字节
数组中的reg值的wchar\u t
表示,其中字节
肯定与字符
相同。A
在ANSI中表示为值65
,在UNICODE中表示为65 0
。了解char
、wchar\u t
、ANSI、UNICODE、多字节、UTF8、UTF16、UTF32。。。那就回来吧!但是,这样你就不必再在这里询问了……;-)