不存在从 "CString" 到 "BOOL *" 的适当转换函数
时间: 2023-11-11 09:05:33 浏览: 36
根据提供的引用内容,没有找到从"CString"到"BOOL*"的适当转换函数。但是,可以使用"CString"类的成员函数"GetBuffer"和"ReleaseBuffer"将"CString"转换为"const char*",然后使用"atoi"或"sscanf"等函数将"const char*"转换为"BOOL"类型。具体实现方法如下:
```c++
CString str = "true";
const char* ch = str.GetBuffer(str.GetLength());
BOOL b = atoi(ch);
str.ReleaseBuffer();
```
需要注意的是,"GetBuffer"函数返回一个指向"CString"对象内部字符缓冲区的指针,"ReleaseBuffer"函数释放该指针并更新"CString"对象的长度。因此,在使用"GetBuffer"函数时,需要在使用完毕后调用"ReleaseBuffer"函数以避免内存泄漏。
相关问题
BOOL CryptBinaryToStringW(const BYTE *,DWORD,DWORD,LPWSTR,DWORD *)”: 无法将参数 4 从“LPSTR”转换为“LPWSTR”
这个错误是因为函数 `CryptBinaryToStringW` 的第四个参数需要的是 `LPWSTR` 类型的指针,而不是 `LPSTR` 类型的指针。
解决这个问题的方法是将第四个参数从 `LPSTR` 类型的指针转换成 `LPWSTR` 类型的指针,可以使用 `MultiByteToWideChar` 函数进行转换。以下是修改后的代码:
```cpp
// Base64 编码
CString EncodeBase64(const CString& str)
{
DWORD dwSize = 0;
CryptBinaryToString((BYTE*)str.GetString(), str.GetLength(), CRYPT_STRING_BASE64, NULL, &dwSize);
LPSTR lpstr = new CHAR[dwSize];
CryptBinaryToString((BYTE*)str.GetString(), str.GetLength(), CRYPT_STRING_BASE64, lpstr, &dwSize);
// 转换 LPSTR 到 LPWSTR
int nLen = MultiByteToWideChar(CP_ACP, 0, lpstr, -1, NULL, 0);
LPWSTR lpwstr = new WCHAR[nLen];
MultiByteToWideChar(CP_ACP, 0, lpstr, -1, lpwstr, nLen);
CString result(lpwstr, dwSize);
delete[] lpstr;
delete[] lpwstr;
return result;
}
// Base64 解码
CString DecodeBase64(const CString& str)
{
DWORD dwSize = 0;
CryptStringToBinary(str, 0, CRYPT_STRING_BASE64, NULL, &dwSize, NULL, NULL);
LPBYTE lpbyte = new BYTE[dwSize];
CryptStringToBinary(str, 0, CRYPT_STRING_BASE64, lpbyte, &dwSize, NULL, NULL);
CString result((LPCTSTR)lpbyte, dwSize);
delete[] lpbyte;
return result;
}
```
使用时可以这样调用:
```cpp
CString str = "Hello, world!";
CString encodedStr = EncodeBase64(str);
CString decodedStr = DecodeBase64(encodedStr);
```
其中 `str` 是待编码的字符串,`encodedStr` 是编码后的字符串,`decodedStr` 是解码后的字符串。
“BOOL CryptBinaryToStringW(const BYTE *,DWORD,DWORD,LPWSTR,DWORD *)”: 无法将参数 4 从“LPSTR”转换为“LPWSTR”
这个错误是因为函数 `CryptBinaryToString` 的第四个参数需要的是 `LPWSTR` 类型的指针,而不是 `LPSTR` 类型的指针。
解决这个问题的方法是将第四个参数从 `LPSTR` 类型的指针转换成 `LPWSTR` 类型的指针,可以使用 `MultiByteToWideChar` 函数进行转换。以下是修改后的代码:
```cpp
// Base64 编码
CString EncodeBase64(const CString& str)
{
DWORD dwSize = 0;
CryptBinaryToString((BYTE*)str.GetString(), str.GetLength(), CRYPT_STRING_BASE64, NULL, &dwSize);
LPSTR lpstr = new CHAR[dwSize];
CryptBinaryToString((BYTE*)str.GetString(), str.GetLength(), CRYPT_STRING_BASE64, lpstr, &dwSize);
// 转换 LPSTR 到 LPWSTR
int nLen = MultiByteToWideChar(CP_ACP, 0, lpstr, -1, NULL, 0);
LPWSTR lpwstr = new WCHAR[nLen];
MultiByteToWideChar(CP_ACP, 0, lpstr, -1, lpwstr, nLen);
CString result(lpwstr, dwSize);
delete[] lpstr;
delete[] lpwstr;
return result;
}
// Base64 解码
CString DecodeBase64(const CString& str)
{
DWORD dwSize = 0;
CryptStringToBinary(str, 0, CRYPT_STRING_BASE64, NULL, &dwSize, NULL, NULL);
LPBYTE lpbyte = new BYTE[dwSize];
CryptStringToBinary(str, 0, CRYPT_STRING_BASE64, lpbyte, &dwSize, NULL, NULL);
CString result((LPCTSTR)lpbyte, dwSize);
delete[] lpbyte;
return result;
}
```
使用时可以这样调用:
```cpp
CString str = "Hello, world!";
CString encodedStr = EncodeBase64(str);
CString decodedStr = DecodeBase64(encodedStr);
```
其中 `str` 是待编码的字符串,`encodedStr` 是编码后的字符串,`decodedStr` 是解码后的字符串。