2016-11-18 57 views
0

傳輸到Java客戶端的雙值我從C#-mqtt客戶端向Java-mqtt客戶端傳輸雙值。 MQTT需要其有效載荷是一個字節[]所以在c#我做如下:C# - 通過字節[]

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

和過MQTT其發送到Java客戶端,這又

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

然而,雖然原始的double值在〜1到10的範圍內,所得到的java值在10^-311到10^-312的範圍內。

我對c#不是很熟悉,並且找不到問題。

這是抵消問題嗎? LE/BE?如果你能給我一個提示,我幾乎會陷入困境,並會很喜歡。

+0

不知道C#的字節緩衝區翻轉的字節順序,但可以使用['Double.doubleToLongBits'(https://開頭的文檔。 oracle.com/javase/7/docs/api/java/lang/Double.html#doubleToLongBits(double))以及適當的打印以可視化「double」的位;可能會幫助您確定是否存在排序問題。 –

+0

Java ByteBuffer也有'order(ByteOrder or)'方法可以用來翻轉順序,它應該是一行插入來測試它是否是一個排序問題 – hardillb

+0

hardillb hah!謝謝你的提示。 .order(ByteOrder.LITTLE_ENDIAN)做了詭計!你能添加一個答案嗎? – Aeefire

回答

0

正如在評論中提到的,請嘗試使用ByteBuffer.order(ByteOrder)方法