2014-12-07 65 views
0

C側:套接字:傳遞無符號字符陣列從C到JAVA

unsigned char myBuffer[62]; 
fread(myBuffer,sizeof(char),62,myFile); 
send(mySocket, myBuffer, 62,0); 

JAVA側:

bufferedReader.read(tempBuffer,0,62); 

現在,在JAVA I接收(使用插座)程序在C程序值小於0x80沒有問題,但我收到的所有值等於或大於0x80的C程序中的值爲0xFD。 我需要這個問題的完美解決方案。

+0

對於字符編碼,Java比C更明確。您必須知道您的C程序使用的字符編碼,因此您的Java程序使用相同的編碼解釋字節。 – Raedwald 2014-12-07 09:34:41

+1

@Raedwald如果這是文本而不是二進制數據; OP沒有告訴 – fge 2014-12-07 09:36:41

+0

好,那麼你怎麼告訴我們你想要做什麼?這看起來像一個[XY問題](https://xyproblem.info)給我 – fge 2014-12-07 09:46:50

回答

3

請勿使用Reader讀取字節,請使用InputStream

A Reader是爲了讀取個字符;它接收一串字節並(嘗試並)將這些字節轉換爲字符;你失去了原來的字節。

更詳細地說,Reader將使用CharsetDecoder;該解碼器被配置爲使得未知字節序列是replaced;此處使用的編碼可能會用字符0x00fd替換未知的字節序列,因此會導致結果。

另外,你不關心signed vs unsigned;在Java中,1000 0000可以是128作爲unsigned char,在-127中作爲byte,但它仍然是1000 0000


如果你發送的是真正的文本,那麼這意味着你選擇解碼的字符集不是好的;您必須知道原始系統中文件的編碼。

+0

InputStream解決問題,謝謝! – 2014-12-07 10:33:50