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
。 我需要這個問題的完美解決方案。
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
。 我需要這個問題的完美解決方案。
請勿使用Reader
讀取字節,請使用InputStream
!
A Reader
是爲了讀取個字符;它接收一串字節並(嘗試並)將這些字節轉換爲字符;你失去了原來的字節。
更詳細地說,Reader
將使用CharsetDecoder
;該解碼器被配置爲使得未知字節序列是replaced;此處使用的編碼可能會用字符0x00fd替換未知的字節序列,因此會導致結果。
另外,你不關心signed vs unsigned;在Java中,1000 0000
可以是128作爲unsigned char
,在-127中作爲byte
,但它仍然是1000 0000
。
如果你發送的是真正的文本,那麼這意味着你選擇解碼的字符集不是好的;您必須知道原始系統中文件的編碼。
InputStream解決問題,謝謝! – 2014-12-07 10:33:50
對於字符編碼,Java比C更明確。您必須知道您的C程序使用的字符編碼,因此您的Java程序使用相同的編碼解釋字節。 – Raedwald 2014-12-07 09:34:41
@Raedwald如果這是文本而不是二進制數據; OP沒有告訴 – fge 2014-12-07 09:36:41
好,那麼你怎麼告訴我們你想要做什麼?這看起來像一個[XY問題](https://xyproblem.info)給我 – fge 2014-12-07 09:46:50