2015-05-30 32 views
1

我有一個應用程序在Eclipse中編寫的Java和應用程序在C#中編寫的Visual Studio中。我有他們之間的tcp連接。通過tcp發送接受錯誤的字節

我的項目發送一條ID消息。直到現在,發送的消息都運行良好。它在Visual Studio中向我展示了它發送的ID號爲120,但是當我在eclipse中讀取時,它讀取爲-136。正如我所說,上週工作得很好(我沒有使用它一個星期,突然它現在不工作)。 這是爲什麼? 我不知道它是否相關,但136 + 120 = 256. 如果我發送125它得到-131(每發送給256)。 請幫助我明天。謝謝。

+0

你如何發送這些ID?在二進制形式或文本形式?如果使用二進制形式,那麼可能一方發送*無符號* 8位值,而另一方讀取*有符號* 8位值。 – dlask

+0

Java將8位字節解釋爲負數 - 這是故意用這種方式設計的,實際上發現它是無用的。將字節值轉換爲int並使用它。 –

回答

0

看起來好像字節中最重要的位正在翻轉。沒有看到代碼,沒有什麼可說的。 0-127使用前三位,並且在有符號表示下,這是最大值。 128的無符號是-127在二進制補碼下簽名。

+0

當我發送100時,它接受良好。所以我想你是正確的,我可以發送的最大數字爲128字節。謝謝。 – HardQS

+0

127是最大值,而不是128. –

+0

真正的問題是Java不支持無符號字節。 [這個問題]的答案(http://stackoverflow.com/questions/7401550/how-to-convert-int-to-unsigned-byte-and-back)討論瞭如何以這樣的方式進行轉換能夠在int中看到高於127的數值。 – augray