将string转换为CString

Convert string to CString

本文关键字:CString 转换 string      更新时间:2023-10-16

我有一个这样声明的字符串:

string query = "INSERT INTO tblVehicle (OVImage) VALUES ('";
query += decodedData;
query += "')";

(其中'decodedData'是保存Base64数据的字符串)当我使用此代码将其转换为'CString'时

CString cQuery = query.c_str();

我在'CQuery'中得到这一行:

"INSERT INTO tblVehicle (OVImage) VALUES ('ÿØÿà"

和字符串的其余部分不在'CQuery'中。我应该怎么做在CString长文本?

每当您看到字符串突然像这样"结束"时,您可以推断源字符串中在该点有一个空字符(0)。C字符串也被称为以空结尾的字符串,因为第一个空字符表示数据的结束。std::string可以容忍这些,但是当你把它插入CString时,它会在那一点被切断,因为数据中的null告诉它停在那里。

decodedData不包含有效的base64数据;它似乎只是转换的二进制数据。将二进制数据转换为字符串最终会导致随机的空字符,所以这是CString的禁忌。只看"ÿØÿà",很明显它不是一个普通的base64字符串,因为base64字符串通常包含a-z, a-z, 0-9, +和/。https://en.wikipedia.org/wiki/Base64。因为一个正确的Base64字符串不会包含null,所以这个问题不会发生。

编辑:关于base64字符串的问题…从字符串中删除空值的一种简单方法是将它们全部替换。假设decodedData是一个字符串…
std::replace(decodedData.begin(), decodedData.end(), '', '!');

那么你就可以知道空在哪里出现了。但这可能是有原因的,你应该弄清楚。