![](/img/trans.png)
[英]Passing Java Map<String, String> to C++ method using SWIG
[英]Strange string behavior in Java and C++ using SWIG
因此,我正在使用SWIG从某些Java代码中调用一些C ++代码。 我正在调用的函数需要一个字符串和一个整数。 问题是,字符串似乎在两种语言之间发生了变化:
Java:
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编码解决。 仍在Java中将SWIG与String一起使用,而在C ++中将String与SWIG一起使用。
您正在读取的是二进制文件; 在Java中尝试将数据转换为文本字符串没有任何意义。 使用C ++,您将不会遇到此问题,因为C ++中的string
没有字符编码,并且在读写时不应用任何转换,但是您还会遇到另一个问题,因为数据可能包含以NUL字符结尾的字符串。
在Java中,您应该使用字节数组来保存二进制数据。 在C ++中,您可能会使用char指针来动态分配内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.