java long zu c long long int



  • Hallo,

    ich habe nun endlich einen Java RPC Server zum laufen bekommen. Dieser gibt einen Long von Java zurück.
    Der C RPC Client bekommt auch eine Antwort von dem Java-RPC-Server, diese ist aber immer 285, obwohl der Java-RPC-Server sagt, dass er 1228237075973 versendet hat.

    Wer kann mir sagen, wie ich den Wert vom RPC-Server auch in meine long long int Variable bekomme?

    Falls ihr noch weitere Informationen braucht, bitte fragen.

    Danke
    nils



  • ^^wahrscheinlich musste die endianess drehen. java longs sind 64 bittige 'big endian' werte (das msb ist vorn), während x86-gurken alle multibyte werte genau anders rum behandeln.
    🙂



  • das kann aber nicht das einzige problem sein, sonst würde er zwar ne andere, aber dennoch sehr große Zahl bekommen



  • Danke,

    also wenn ich es folgendermaßen probiere zu konvertieren, dann kommt zwar ein anderes Ergebnis aus, aber auch nicht das richtige.

    void big2littleEndian(long long int* zahl)
    {
          int i;
          char byte1;
          char byte2;
          char* zahl1 = malloc(sizeof(*zahl));
          zahl1 = (char*) zahl;
    
          for(i = 0; i < 4; i++)
          {
    	byte1 = zahl1[i];
    	byte2 = zahl1[7-i];
    	zahl1[i] = byte2;
    	zahl1[7-i] = byte1;	
          }
    
    }
    

    Ist das überhaupt die richtige Art der umwandelung?
    Wie verhält sich das mit dem Vorzeichenbit?

    Grüße
    Nils



  • vlad_tepesch schrieb:

    das kann aber nicht das einzige problem sein, sonst würde er zwar ne andere, aber dennoch sehr große Zahl bekommen

    wahrscheinlich ja. jedenfalls, wenn man seine zahl in hex umwandelt ergibt das 0x11DF8A27605 und der anfang (diese 0x11d) ist zufälligerweise seine 285.
    🙂



  • Hi,

    ich bin es nochmal.
    Ich habe nun den Wireshark auf das RPC angesetzt.
    Mit dem Ergebnis, dass, wenn ich den Wert, der aus dem Java abgeschickt wird, um 4 Bytes nach links shifte, dann kommt in dem C das richtige Ergebnis an.
    Ich muss dazu nicht mal von big auf little endian umwandeln.
    Aber woran kann es liegen, wenn ich das ganze um 4 Bytes nach links shifte, dass es dann funktioniert?

    Danke
    Nils



  • NiBurhe schrieb:

    Aber woran kann es liegen, wenn ich das ganze um 4 Bytes nach links shifte, dass es dann funktioniert?

    wirklich 4 und nicht 3 bytes? jedenfalls liegts daran, dass du das eine byte an die richtige stelle schiebst. versuch mal, ob's mit grösseren werten als 255 auch noch geht. ich befürchte aber nicht.
    🙂



  • Ich kann den gesamten Timestamp empfangen und bekomme die richtige Zeit raus, also sind die Werte weit größer als 255.



  • NiBurhe schrieb:

    Ich kann den gesamten Timestamp empfangen und bekomme die richtige Zeit raus, also sind die Werte weit größer als 255.

    dann hast du wohl per zufall das richtige gemacht.
    🙂



  • Jetzt muss ich das nur noch irgendwie dem Dozenten erklären, warum das so ist 😉


Anmelden zum Antworten