Java 如何按照C和C+的字节顺序将类转换为字节数组+;?
我正在为字节数组see创建一个类对象,并将该数组传递给Java 如何按照C和C+的字节顺序将类转换为字节数组+;?,java,c,Java,C,我正在为字节数组see创建一个类对象,并将该数组传递给DatagramPacket,以便通过UDP通信在目的地发送。在目标端,有一个C应用程序正在运行,我得到了有线字符。我敢肯定这和字节顺序有关。因为在接收数据包时,我能够将C的结构转换成类,但不能将C的结构转换成类。以下是sudo代码: // recieving part DatagramPacket packet = new DatagramPacket(buffer, buffer.length); socket.receive(pack
DatagramPacket
,以便通过UDP通信在目的地发送。在目标端,有一个C应用程序正在运行,我得到了有线字符。我敢肯定这和字节顺序有关。因为在接收数据包时,我能够将C的结构转换成类,但不能将C的结构转换成类。以下是sudo代码:
// recieving part
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet)
UdpPacket udp = new UdpPacket(buffer);
class UdpPacket implements Serializable
{
int a;
byte []message = new byte[10];
public UdpPacket(byte[] data)
{
ByteBuffer bb = ByteBuffer.wrap(data);
bb.order(ByteOrder.nativeOrder());
a = bb.getInt();
bb.get(message);
}
}
// sending ..
按照上述链接将UdpPacket对象转换为字节数组,但在目标位置始终存在垃圾值
DatagramSocket clientSocket = new DatagramSocket();
byte [] respoBytes = ObjectSerializer.serializeObject(udpPacket);
ByteBuffer bb = ByteBuffer.wrap(respoBytes);
byte []test = new byte[1116];
bb.order(ByteOrder.nativeOrder()); // tried all the orders here
bb.get(test);
DatagramPacket sendPacket = new DatagramPacket(test,test.length,client, Integer.parseInt(TxtFdPort.getText().toString()));
clientSocket.send(sendPacket)
) 在发送前和接收后打印字节序列。这将告诉您它们是否相同。然后检查对应于例如
int
的字节,您将立即看到它们的顺序是否正确
很难说得更具体,因为您没有显示发送代码。最明显的问题是忽略读取数据的长度
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
ByteBuffer bb = ByteBuffer.wrap(packet.getData(), 0, packet.getLength());
// you need to know the endianess, not hope it's the same.
bb.order(ByteOrder.LITTLE_ENDIAN);
int a = bb.getInt(); // asuming there is at least 4 bytes.
byte[] message = new byte[bb.remaining()];
bb.get(message);
对于发送,我只会这样做
int port = Integer.parseInt(TxtFdPort.getText().toString());
byte [] respoBytes = ObjectSerializer.serializeObject(udpPacket);
DatagramPacket sendPacket = new DatagramPacket(respoBytes, respoBytes.length, client, port);
clientSocket.send(sendPacket);
我成功地接收到了数据,问题是发送到目的地时。在这种情况下,我会认为您的发送代码是我们需要查看的。@Yuvi您的ByteBuffer没有做任何有用的事情,尽管它可以截断消息。我已经按照您的建议尝试过了。。。int值的输出是这样的
83946924
它应该是5
。这里有“C和C++的字节顺序”之类的东西,但它的主机硬件确实有一个端点。