char 数组java_使用Java char数组处理C char数组

通过套接字,我将信息从用C编写的程序发送到用Java编写的程序.

通过C中的程序,我通过char数组(使用Internet套接字)发送两个字节,并且Java中接收的信息也存储在char数组中.

我的主要问题是Java阵列中收到的信息与C程序传输的信息不完全对应.

我已经读过Java中的字符长度为16位,C中的字符长度为8位.这可能是问题,但我不知道如何处理/解决这个问题.

发送信息的C代码如下:

char buffer[256];

bzero(buffer,256);

n = read(fd, buffer, 255); // getting info from an uart port, which works properly

n = write(sockfd,buffer,3); // send the information through the socket

部分Java代码(适用于Android应用程序)如下:

char[] buffer = new char[256];

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

int readX = in.read(buffer, 0, 3);

if (readX > 0) { // I am using a handler to manipulate the info

Message msg = new Message();

msg.obj = buffer;

mHandler.sendMessage(msg);

}

....

// Part of the handler is the following:

mHandler = new Handler() {

@Override

public void handleMessage(Message msg) {

char[] buffer;

buffer = (char[])msg.obj; // the information here is different from the one sent from the C program

....

}

}

任何解决这个问题的建议我都会非常感激.

提前谢谢,Gus.

解决方法:

在C和C中,char数据类型是8位字符,大致对应于Java字节类型.在Java中,基本char类型是16位Unicode字符.当您在Java中从字节转换为字符(或反之亦然)时,必须进行映射,具体取决于字节流的字符编码(UTF-8,ISO-8859-1等),因此您必须知道如何编码C字节流.在你的情况下,我猜它是ISO-8859-1.如果它确实是二进制数据,那么您应该使用Java字节类型.

编辑:

您必须知道从C发送的数据是字符还是二进制,如果是字符,C程序如何编码数据(ISO-8859-1,UTF-8等).

如果数据是二进制的,那么你必须使用BufferedInputStream来读取字节,而不是BufferedReader,它将字节解码为字符,这是你不想要的,因为数据是二进制的.

如果数据是字符,那么您可以使用2参数构造函数

InputStreamReader(InputStream in, String charSetName)

或者其他一个2-arg构造函数,它允许您指定如何将字节解码为字符.

标签:c-3,java,sockets

来源: https://codeday.me/bug/20190901/1784443.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值