我使用以下代码将字符串从unsigned char*转换为const wchar_t*。我所犯的错误是,只有几个单词被正确地转换,而其余的则是混淆了值。
码
unsigned char* temp = fileUtils->getFileData("levels.json", "r", &size);
const char* temp1 = reinterpret_cast<const char*>(temp);
size_t len = mbstowcs(nullptr, &temp1[0], 0);
if (len == -1) {
} else {
wchar_t* levelData = new wchar_t();
mbstowcs(&levelData[0], &temp1[0], size*10);
}输出
temp1 = "[{"scaleFactor": 1}][{"scaleFactor": 2}][{"scaleFactor": 3}][{"scaleFactor": 4}][{"scaleFactor": 5}][{"scaleFactor": 6}][{"scaleFactor": 7}][{"scaleFactor": 8}][{"scaleFactor": 9}][{"scaleFactor": 10}]"
levelData = "[{"scaleFactor": 1}][{"scaleFactor": 2}][{"scaleFactor": 3}][{"scaleFactor": 4}][{"scaleFactor": 5}][{"scaleFactor": 6}][{"scaleFactor": 7}][{"s慣敬慆瑣牯㨢㠠嵽筛猢慣敬慆瑣牯㨢㤠嵽筛猢慣敬慆瑣牯㨢ㄠ細ﵝ﷽ꮫꮫꮫﺫﻮ"发布于 2013-05-17 12:41:37
如果要动态分配缓冲区大小(使用new),则不需要对缓冲区大小进行硬编码。
wchar_t* levelData = new wchar_t[len+1];
mbstowcs(&levelData[0], &temp1[0], len);发布于 2013-05-17 12:27:40
wchar_t* levelData = new wchar_t();
mbstowcs(&levelData[0], &temp1[0], size*10);为一个字符分配了足够的内存。这还不足以存储您的字符串,因此,事情当然不会正常工作。
还有,那个10是从哪里来的?
发布于 2013-05-17 12:38:43
多亏了@BenVoigt,才发现了这个错误。把密码改成-
wchar_t levelData[200];
mbstowcs(&levelData[0], &temp1[0], size);https://stackoverflow.com/questions/16608990
复制相似问题