C++ 在C+中读取和写入Windows注册表+;(如何将字符串转换为wchar(?)
这是我任务的一部分。我知道如何打开/读取注册表项和创建值,但我有几个问题。我的代码: 这是我将新字符串值写入注册表的方式:C++ 在C+中读取和写入Windows注册表+;(如何将字符串转换为wchar(?),c++,winapi,C++,Winapi,这是我任务的一部分。我知道如何打开/读取注册表项和创建值,但我有几个问题。我的代码: 这是我将新字符串值写入注册表的方式: void lCreateKeyOne(HKEY hKey, LPCWSTR lSubKey) { WCHAR wcValue[] = TEXT"testvalue"; LONG lNewValue = RegSetValueEx (hKey, L"MytoolsTestKey",
void lCreateKeyOne(HKEY hKey, LPCWSTR lSubKey)
{
WCHAR wcValue[] = TEXT"testvalue";
LONG lNewValue = RegSetValueEx (hKey,
L"MytoolsTestKey",
NULL,
REG_SZ,
(LPBYTE)wcValue,
sizeof(wcValue));
}
它可以工作,但我想生成随机字符串并将其写入注册表项。
以下是生成随机字符串的方法:
static const char alphanum[] =
"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
int stringLength = sizeof(alphanum) - 1;
char genRandom()
{
return alphanum[rand() % stringLength];
}
srand(time(0));
string Str;
for (unsigned int i = 0; i < 20; ++i)
{
Str += genRandom();
}
static const char alphanum[]=
"0123456789"
“ABCDEFGHIJKLMNOPQRSTUVWXYZ”
“abcdefghijklmnopqrstuvwxyz”;
int stringLength=sizeof(alphanum)-1;
char genRandom()
{
返回alphanum[rand()%stringLength];
}
srand(时间(0));
字符串Str;
for(无符号整数i=0;i<20;++i)
{
Str+=genRandom();
}
static wchar\t const*const alphanum{
L“0123456789”
“ABCDEFGHIJKLMNOPQRSTUVWXYZ”
“abcdefghijklmnopqrstuvwxyz”};
constexpr auto stringLength{wcslen(alphanum)};
wchar_t genRandom()
{
返回alphanum[std::rand()%stringLength];
}
// ...
std::srand(静态_cast(std::time(nullptr));
std::wstring-Str;
对于(std::size_t i{};i<20;++i){
Str+=genRandom();
}
那么不使用string或std::wstring怎么样
static wchar_t const * const alphanum{
L"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz" };
constexpr auto stringLength{ wcslen(alphanum) };
wchar_t genRandom()
{
return alphanum[std::rand() % stringLength];
}
// ...
std::srand(static_cast<unsigned>(std::time(nullptr)));
wchar_t Str[20+1] = { 0 };
for (int i = 0; i < 20; i++)
{
Str[i] = genRandom();
}
static wchar\t const*const alphanum{
L“0123456789”
“ABCDEFGHIJKLMNOPQRSTUVWXYZ”
“abcdefghijklmnopqrstuvwxyz”};
constexpr auto stringLength{wcslen(alphanum)};
wchar_t genRandom()
{
返回alphanum[std::rand()%stringLength];
}
// ...
std::srand(静态_cast(std::time(nullptr));
wchar_t Str[20+1]={0};
对于(int i=0;i<20;i++)
{
Str[i]=genRandom();
}
我试着用char代替wchar,它写汉字
因为您的方法
RegSetValueEx
引用的是作为宽字符格式接收的RegSetValueExW
sizeof(char)=1
和sizeof(wchar\u t)=2
,两个char
字符的值被读取为wchar\u t
字符(如您在汉字中看到的)。如果您想尝试使用char1,可以特别参考RegSetValueExA
)如果您想使用char
s而不是WCHAR
s,为什么不能使用?还是不在项目中定义UNICODE
宏?2) 这不是。C没有字符串
。为什么要标记C?对于Str
,使用std::wstring
而不是std::string
。我认为这应该是一个直接的替代品。与其按你在问题中提出的那样做,不如在Windows中永远不要使用8位文本来回避这个问题
static wchar_t const * const alphanum{
L"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz" };
constexpr auto stringLength{ wcslen(alphanum) };
wchar_t genRandom()
{
return alphanum[std::rand() % stringLength];
}
// ...
std::srand(static_cast<unsigned>(std::time(nullptr)));
wchar_t Str[20+1] = { 0 };
for (int i = 0; i < 20; i++)
{
Str[i] = genRandom();
}