在java中从c读取长字节

时间:2014-11-29 20:39:11

标签: java c

我必须从我的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; 有人可以建议我做错了吗?我怎么能纠正它。

1 个答案:

答案 0 :(得分:5)

您必须更改ByteBuffer的字节顺序:

ByteBuffer buf = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN);

因为您可能使用的是小端计算机系统(x86和大多数ARM系统)。