java - 套接字:将无符号字符数组从 C 传递到 JAVA

标签 java c++ c sockets unsigned-char

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 的值没有问题,但是对于所有等于或大于的值,我收到 0xFD0x80 在 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/

相关文章:

java - Hikari 如何回收连接?

java - 组织.json.JSONException : Unterminated string at character 1834

c++ - cpp中的cin对象

c - 在C中,如何对每个指针都指向可变长度int数组的指针数组进行排序?

java - Java 中的泛型类型

java - 将传入字符串与查找字符串进行匹配

c++ - 我收到错误 'List::showList' : function-style initializer appears to be a function definition' on a function in my cpp file

c++ - 是否保证初始化顺序

c - 为什么 Windows 安装程序在依赖于其他 DLL 时不使用我的 EmbeddedUIHandler?

c - 使用一系列 write() 而不是单个 write()