繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM