Отправка Java UUID для C + + , как байты и обратно по TCP

я пытаюсь отправить Java UUID C , где он будет использоваться в качестве идентификатора GUID, затем отправить его обратно, и видеть его в качестве UUID, и я надеюсь, чтобы отправить ее на любом всего 16 байт.

Любой предложения по easy way to do This?

у меня сложный способ сделать это, отправив со своего Java на C , где я задаю UUID для его наиболее и наименее значимых бит, напишите это в ByteBuffer, а затем он зачитал ее в виде байтов.

Вот моя глупая-сложный способ получения 2 тоскует из UUID, посылая их в C :

Java

public static byte[] asByteArray(UUID uuid) 
 {
    long msb = uuid.getMostSignificantBits();
    long lsb = uuid.getLeastSignificantBits();
    byte[] buffer = new byte[16];

    for (int i = 0; i < 8; i++) {
            buffer[i] = (byte) (msb >>> 8 * (7 - i));
    }
    for (int i = 8; i < 16; i++) {
            buffer[i] = (byte) (lsb >>> 8 * (7 - i));
    }

    return buffer;

}




    byte[] bytesOriginal = asByteArray(uuid);
    byte[] bytes = new byte[16];

    // Reverse the first 4 bytes
    bytes[0] = bytesOriginal[3];
    bytes[1] = bytesOriginal[2];
    bytes[2] = bytesOriginal[1];
    bytes[3] = bytesOriginal[0];
    // Reverse 6th and 7th
    bytes[4] = bytesOriginal[5];
    bytes[5] = bytesOriginal[4];
    // Reverse 8th and 9th
    bytes[6] = bytesOriginal[7];
    bytes[7] = bytesOriginal[6];    	                         
    // Copy the rest straight up    	
    for ( int i = 8; i < 16; i++ )
    {
    	bytes[i] = bytesOriginal[i];
    }    

    // Use a ByteBuffer to switch our ENDIAN-ness
    java.nio.ByteBuffer buffer = java.nio.ByteBuffer.allocate(16);
    buffer.order(java.nio.ByteOrder.BIG_ENDIAN);
    buffer.put(bytes);
    buffer.order(java.nio.ByteOrder.LITTLE_ENDIAN);
    buffer.position(0);

    UUIDComponents x = new UUIDComponents();

    x.id1 = buffer.getLong();
    x.id2 = buffer.getLong();

C

	google::protobuf::int64 id1 = id.id1();
	google::protobuf::int64 id2 = id.id2();

	char* pGuid = (char*) &guid;
	char* pGuidLast8Bytes = pGuid + 8;
	memcpy(pGuid, &id1, 8);
	memcpy(pGuidLast8Bytes, &id2, 8);

Это работает, но, кажется, слишком сложно, и я пока не могу заставить его работать в другом направлении.

(я использую google protocol buffers, чтобы отправить два длинных и обратно)

  • Алекс

Найдено 5 ответов:

Sending a Java UUID to C++ as bytes and back over TCP

http://stackoverflow.com/questions/1055413/sending-a-java-uuid-to-c-as-bytes-and-back-over-tcp

Посмотреть решение →