2016-11-18 2 views
0

Je transmets une double valeur d'un client C# -mqtt à un client Java-mqtt. Mqtt exige sa charge utile d'être un octet [] alors je en C# Je fais ce qui suit:C# - valeur double transmise au client Java par octet []

byte[] vals = BitConverter.GetBytes(sub.value); // c#-sender 

et transmettre ce sur mqtt à un client java, qui à son tour

double result = ByteBuffer.wrap(vals).getDouble(); // java-receiver 

Cependant, alors que la valeur double d'origine est comprise entre ~ 1 et 10, la valeur java résultante est comprise entre 10^-311 et 10^-312. Je ne suis pas très familier avec C# à ce stade et ne peux pas trouver le problème.

Est-ce un problème de décalage? LE/BE? Je suis plutôt coincé et j'adorerais que vous me donniez un indice.

+0

Ne sait pas C#, mais vous pouvez utiliser [ 'Double.doubleToLongBits'] (https: // docs. oracle.com/javase/7/docs/api/java/lang/Double.html#doubleToLongBits(double)) et l'impression appropriée pour visualiser les bits du 'double'; pourrait vous aider à déterminer si l'endianness est le problème. –

+0

Java ByteBuffer a aussi la méthode 'order (ByteOrder ou)' qui peut être utilisée pour retourner l'ordre, il devrait être un insert d'une ligne pour tester s'il s'agit d'un problème de commande – hardillb

+0

hardillb hah! Merci pour le conseil. .order (ByteOrder.LITTLE_ENDIAN) a fait l'affaire! Pouvez-vous ajouter une réponse? – Aeefire

Répondre

0

Comme mentionné dans les commentaires, essayez renversant l'ordre des octets sur le ByteBuffer en utilisant la méthode ByteBuffer.order(ByteOrder)