将字符串转换为CString

时间:2015-08-12 05:07:18

标签: c++ type-conversion stdstring c-strings

我有一个声明如下的字符串:

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

(其中'decodingData'是一个包含Base64数据的字符串) 当我使用此代码将其转换为'CString'时

CString cQuery = query.c_str();

我在“CQuery”中得到了这一行:

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

并且字符串的其余部分不在'CQuery'中。我该怎么办才能在CString中使用长文本?

1 个答案:

答案 0 :(得分:0)

每当你看到一个字符串突然“结束”时,你可以推断出那个源字符串中有一个空字符(0)。 C字符串也称为以空字符结尾的字符串,因为第一个空字符表示数据的结尾。 std::string容忍这些,但当你将它粘贴到CString时,它会在那时被切断,因为数据中的空值告诉它停在那里。

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(), '\0', '!');

然后你可以告诉出现在哪里的空值。但是你应该弄清楚这可能是有原因的。