C 端:
unsigned char myBuffer[62];
fread(myBuffer,sizeof(char),62,myFile);
send(mySocket, myBuffer, 62,0);
JAVA 端:
bufferedReader.read(tempBuffer,0,62);
现在在 JAVA 程序中,我在 C 程序中收到(使用套接字)小于 0x80
的值没有问题,但是对于所有等于或大于的值,我收到 0xFD
值0x80
在 C 程序中。
我需要完美的解决方案来解决这个问题。
最佳答案
不要使用Reader
读取字节,使用InputStream
!
Reader
用于读取字符;它接收字节流并(尝试并)将这些字节转换为字符;你丢失了原始字节。
更详细地说,Reader
将使用 CharsetDecoder
;此解码器配置为未知字节序列为 replaced ;并且此处使用的编码可能会用字符 0x00fd 替换未知字节序列,因此您的结果。
此外,您不关心有符号还是无符号; 1000 0000
在 C 中作为 unsigned char
可能是 128,在 Java 中作为 byte
可能是 -127,它仍然是 1000 0000
.
如果您发送的是真正的文本,则说明您选择的用于解码的字符集不是正确的;您必须知道原始系统上文件的编码方式。
关于java - 套接字:将无符号字符数组从 C 传递到 JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27341162/