我必须从我的c程序发送一个long来使用字节缓冲区在java代码中读取。我做错了,因为我无法发送1234并在java中将其读回,因为它被损坏为564049465049088。
在我的C代码中我做了
int64_t resultl = 1234;
然后复制
uint8_t * outBuffer <== pointer to the buffer;
memcpy(outBuffer,&resultl,8);
在java中,我将字节读回
ByteBuffer buf = ByteBuffer.wrap(bytes);
offset=0;
long l = buf.getLong(offset);
这给了我错误的价值564049465049088,因为我从C发送了1234; 有人可以建议我做错了吗?我怎么能纠正它。
答案 0 :(得分:5)
您必须更改ByteBuffer的字节顺序:
ByteBuffer buf = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN);
因为您可能使用的是小端计算机系统(x86和大多数ARM系统)。