簡體   English   中英

C ++字符轉換

[英]C++ char conversion

我現在用Google搜索了2個小時,但找不到我的問題的答案:我需要獲取注冊表REG_SZ值並將其傳遞給char*

char host_val[1024];
DWORD hostVal_size = 1024;
char* hostName;
DWORD dwType = REG_SZ;

RegOpenKeyEx(//no problem here);
if( RegQueryValueEx( hKey, TEXT("HostName"), 0, &dwType, (LPBYTE)&host_val, &hostVal_size ) == ERROR_SUCCESS )
{
      //hostName = host_val; 
} 

我該如何轉換hostName = host_val

結果host_val是一個可能為非空終止的字符串 (請參見“備注”),因此您應使用memcpy將其復制到新分配的字符串中,並確保其為空終止:

hostName = new char[hostVal_size + 1];
// host_val may or may not be null-terminated
memcpy(hostName, host_val, hostVal_size);
hostName[hostVal_size] = '\0';

您稍后需要delete[] hostName

使用函數的ANSI版本

RegQueryValueExA

這樣,您就無需轉換。

如果使用Unicode進行編譯,則會將Unicode字符串(可能未終止)復制到狹窄的char緩沖區中。 unicode字符串中的第一個字符將是0x3100(說明您計算機上的字節序,這可能是小字節序,並且您說的IP地址是192 ....)

填充到char []數組中的值將以單char-null終止的字符串形式返回。 您有兩個選擇。

  1. 使用RegQueryValueExA,其他所有內容保持不變,或者
  2. 將您的char []數組更改為wchar_t []數組,執行當前操作,然后使用WideCharToMultiByte(轉換為SDK)將其轉換為窄。

出於明顯的原因,我會選擇這兩個選項中的前一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM