我需要将二进制数据(文件中的红色)从java传递给c ++(使用jni),所以我有一个需要字符串的C ++函数(因为在c ++字符串中只是char数组)。
我使用以下代码在java中读取我的二进制文件:
byte[] buffer = new byte[512];
FileInputStream in = new FileInputStream("some_file");
int rc = in.read(buffer);
while(rc != -1)
{
// rc should contain the number of bytes read in this operation.
// do stuff...
// next read
rc = in.read(buffer);
String s = new String(buffer);
// here i call my c++ function an pass "s"
}
我担心创建字符串的行,当我将缓冲区放入字符串时实际发生了什么?似乎当数据到达我的c ++代码时,它与我期望的不同。
"字符串"构造函数以某种方式更改数据?
答案 0 :(得分:4)
字符串根本不是char数组。它们是复杂的Unicode动物,具有代码点之间的语义交互,不同的二进制编码等。对于所有程序都是如此。关于C ++唯一不同的是,他们还没有完成抱怨,并开始对此做些事情。
在所有语言中,对于二进制数据,请使用显式二进制数据类型,如字节数组。
答案 1 :(得分:2)
C ++ char
是Java byte
。两者都是8位。 Java char
是一个16位的值。
忽略C ++称之为char
。给它一个Java byte[]
。