套接字:将无符号字符数组从 C 传递到 JAVA
Posted
技术标签:
【中文标题】套接字:将无符号字符数组从 C 传递到 JAVA【英文标题】:Sockets: Passing unsigned char array from C to JAVA 【发布时间】:2014-12-07 08:59:03 【问题描述】: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
没有问题,但我在 C 程序中收到等于或大于 0x80
的所有值的 0xFD
值。
我需要完美解决这个问题。
【问题讨论】:
Java 在字符编码方面比 C 更明确。您必须知道您的 C 程序使用的字符编码,以便您的 Java 程序使用相同的编码来解释字节。 @Raedwald 如果这是文本而不是二进制数据; OP不告诉 好的,那你告诉我们你想做什么呢?对我来说,这看起来像 XY problem 我想将字节流从 C 程序传递到 JAVA 程序,InputStream 解决了我的问题。谢谢! @fge 【参考方案1】:不要使用Reader
读取字节,使用InputStream
!
Reader
用于读取字符;它接收字节流并(尝试并)将这些字节转换为字符;你会丢失原始字节。
更详细地说,Reader
将使用CharsetDecoder
;此解码器配置为使未知字节序列为replaced;并且这里使用的编码可能会用字符 0x00fd 替换未知字节序列,因此是你的结果。
另外,你不关心有符号与无符号; 1000 0000
在 C 中可能是 128 作为 unsigned char
,在 Java 中可能是 -127 作为 byte
,它仍然是 1000 0000
。
如果您发送的确实是文本,那么这意味着您选择的用于解码的字符集不是好的字符集;您必须知道原始系统上的文件所使用的编码。
【讨论】:
以上是关于套接字:将无符号字符数组从 C 传递到 JAVA的主要内容,如果未能解决你的问题,请参考以下文章