2012-03-30 34 views
0

我有客戶端 - 服務器應用程序。 C++上的客戶端,Java上的服務器。
我正在發送字節流表單客戶端到服務器,並從服務器到客戶端。
請告訴我,當我從C++發送char(-1)時,它在Java中的值是多少?
我必須從Java發送什麼值到C++,才能獲得char(-1)在Cpp代碼中?cpp:char(-1)in Java-char

+0

如果您同時編寫客戶端和服務器,爲什麼不直接簡單地嘗試一下呢? – buc 2012-03-30 10:51:40

回答

2

當您通過字節流寫入時,您的char(-1)255到達,因爲字節流通常會傳輸無符號字節。 當您讀取流結束時讀取的-1無法明確發送,但只能通過關閉流。

+0

所以Cpp中的char(-1)是Java中的equals(byte)255? – Ilya 2012-03-30 10:23:48

+0

正如我所說的,您使用的是字節流,字節流是無符號的,'-1'是使用二進制補碼(等於'0xFF'或'255')進行二進制編碼的。 Java字節是有符號的,所以如果你把它讀入一個字節數組中,所有你返回一個'-1',但是Java中的所有流'read()'方法返回無符號字節,所以你會得到'255'。 – Neet 2012-03-30 10:31:12

1

沒有單一的答案;這取決於C++如何編碼數據以及Java如何解釋數據。 char(-1)最常見的編碼是數字255.請注意,這不是由C++定義的;一個補碼系統可能將其編碼爲254.但是也要注意有無數的方法來編碼跨越線路的數據:Elias編碼,各種ASN.1編碼,十進制數字,十六進制等等。

在Java結束,即使假設一個簡單的char-to-byte編碼,它也取決於你如何對字節進行反序列化並轉換爲什麼類型。

+0

現在我正在從Java編寫serializator到Cpp,所以我回答了這個問題:) – Ilya 2012-03-30 10:24:45