Java和C ++中使用SWIG的奇怪字符串行为

时间:2013-10-03 20:56:25

标签: java c++ string swig

所以我使用SWIG从一些Java代码中调用一些C ++代码。我正在调用的函数接受一个字符串和一个整数。问题是,字符串似乎在两种语言之间发生了变化:

爪哇:

byte[] bytes = getBytesFromSomewhere();
String rv = new String(bytes, "ASCII");
logger.info(rv.substring(0,30));
f(rv, 10);

C ++:

bool f(const string& data, const int num) {
  LOG(ERROR) << "Got string: " << data.substr(0,30);
}

我的Java输出是:

GIF89a�Z��

我的C ++输出是:

GIF89a��Z����

是什么给出的?如何使两个字符串相同?

编辑:使用字节数组的Base-64编码解决。仍在SWIG中使用Java中的String和C ++中的字符串。

1 个答案:

答案 0 :(得分:1)

您正在阅读的内容是二进制文件;尝试将数据转换为Java中的文本字符串没有意义。使用C ++,您不会遇到此问题,因为C ++中的string没有字符编码,并且在读取和写入时不会应用任何转换,但是您会遇到另一个问题,因为数据可能包含字符串终止NUL字符。

在java中,您应该使用字节数组来保存二进制数据。在C ++中,您可能会使用char指针来动态分配内存。