0

所以我使用 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 中的字符串和 C++ 中的字符串。

4

1 回答 1

1

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

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

于 2013-10-03T21:11:35.570 回答