için Java'yı int64'e kadar uzun bir süreye dönüştürün Java istemcisinden C++ sunucusundaki soket bağlantısı aracılığıyla bazı sayısal verileri alıyorum. 4 bayt int tipi veri aldığımda, ntohl() işlevini kullanmak veya C++ int türüne dönüştürmek için bit sırasını ters çevirmek gerekir. Ancak, uzun veri türünü Java'dan dönüştürmeye çalışırken sorun yaşıyorum. Ne denedim olursa olsun, doğru değeri elde edemedim. Ben de LONG64, ULONG64 ve int64_t kullandım ve bunların hiçbiri işe yaramadı. Yaptığım C++ tarafında, Java uzun s = 1 göndermek ÖrneğinC++
:
int64_t size;
recv(client, (char *)&size, sizeof int64_t, 0);
size = ntohl(size)
Sonra boyut 0 olacak ben yoksa ne olursa olsun orijinal uzun değeri Java'da! Ben ntohl() dönüşüm sonra size = s = 1
için 72057594037927936 yapmazsanız
Ben pek bu konu hakkında herhangi bir yararlı bilgiler bulduk ve herhangi bir öneri takdir ediyorum.
Netlik için, mimaride * 64 bit * 4 bayt int türünde bir veri var? Son kontrol ettim, ** 4 ** bayt neredeyse her zaman 4 oktet = ** 32 ** bit. Her zaman (a) bunları bir int8_t ar [n] 'da okuyabileceğinizi ve aslında bayt sayısını okuyabildiğini ve sırayla nerede olduklarını doğrulayabileceğinizi biliyorsunuz. 'Recv' nin dönüş sonucunun doğrulanması da zarar görmemiştir. – WhozCraig
Java, C ve C++ 'dan farklı olarak, endianiteyi umursamıyor; büyük bir endian olacak. Bu senin sorununun kaynağı değil mi? – fge
Önerileriniz için teşekkür ederiz. Rob'un cevabında söylediği gibi, problem ntohl() işlevinin kendisi üzerinde, 32 bit veri üzerinde çalışıyor. –