所以我使用SWIG從一些Java代碼中調用了一些C++代碼。我正在調用的函數需要一個字符串和一個整數。問題是,該字符串似乎這兩種語言之間切換:使用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中使用帶有String的SWIG,並在C++中使用字符串。
只是猜測,但你的字符串似乎不是正確的零終止。字節數組是否轉換爲std :: string? – pag3faul7