int到Java中的unsigned char数组

时间:2016-07-19 19:02:08

标签: java android qt types casting

我尝试使用socket连接Android(Java)和Linux(Qt C ++)。之后我想以字节为单位传输消息长度。为了在C ++端转换无符号字符数组中的int,我使用:

QByteArray IntToArray(qint32 source) 
{
    QByteArray tmp;
    QDataStream data(&temp, QIODevice::ReadWrite);
    data << source;
    return tmp;
}

但我不知道我如何在Java端进行相同的转换,因为Java没有无符号类型。我尝试使用一些例子但总是得到不同的结果。所以,我需要Java方法,它为source = 17:

返回这个

0x000x000x000x11

我知道这是一个非常简单的问题,但我是Java新手,所以我不清楚。

UPD:

爪哇:

PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.print(ByteBuffer.allocate(4).putInt(17).array());

Qt C ++:

 QByteArray* buffer = new QByteArray();
 buffer->append(socket->readAll());

输出:

  

buffer = 0x5b0x420x400x610x390x650x31 ,   0x620x660x35

UPD2:

爪哇:

out.print(toBytes(17));
...
 byte[] toBytes(int i)
        {
            byte[] result = new byte[4];

            result[0] = (byte) (i >> 24);
            result[1] = (byte) (i >> 16);
            result[2] = (byte) (i >> 8);
            result[3] = (byte) (i /*>> 0*/);

            return result;
        }

Qt C ++:相同

输出:

  

buffer = 0x5b0x420x400x630x380x610x39 ,   0x330x380x33

UPD3:

Qt C ++:

 QByteArray buffer = socket->readAll();
    for(int i = 0; i < buffer.length(); ++i){
        std::cout << buffer[i];
    }
    std::cout<<std::endl;

输出:

  

[B @ 938a15c

1 个答案:

答案 0 :(得分:2)

首先,请勿使用PrintWriter

以下是关于Java I / O的一些事项:

  • Streams用于字节,读者/写入者用于字符
  • 在Java中,字符一个字节。字符具有与之关联的编码,如UTF-8。字节不会。

当您将Stream包裹在ReaderWriter中时,您将获取字节流并对该字节流强制执行字符编码。你不想在这里。

试试这个:

    OutputStream out = socket.getOutputStream();
    out.write(toBytes(17));