【问题标题】:Sockets: Passing unsigned char array from C to JAVA套接字:将无符号字符数组从 C 传递到 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

标签: java c++ c sockets unsigned-char


【解决方案1】:

不要使用Reader 读取字节,使用InputStream

Reader 用于读取字符;它接收字节流并(尝试并)将这些字节转换为字符;你会丢失原始字节。

更详细地说,Reader 将使用CharsetDecoder;此解码器配置为使未知字节序列为replaced;并且这里使用的编码可能会用字符 0x00fd 替换未知字节序列,因此是你的结果。

另外,你不关心有符号与无符号; 1000 0000 在 C 中可能是 128 作为 unsigned char,在 Java 中可能是 -127 作为 byte,它仍然是 1000 0000


如果您发送的确实是文本,那么这意味着您选择的用于解码的字符集不是好的字符集;您必须知道原始系统上的文件所使用的编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-06
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    相关资源
    最近更新 更多