[英]int to unsigned char array in Java
I'm trying to connect Android(Java) with Linux(Qt C++) using socket. 我正在尝试使用套接字将Android(Java)与Linux(Qt C ++)连接。 After that I want to transfer length of message in bytes.
之后,我想以字节为单位传输消息的长度。 For converting int in unsigned char array on the C++ side I use:
为了在C ++端将int转换为unsigned char数组,我使用:
QByteArray IntToArray(qint32 source)
{
QByteArray tmp;
QDataStream data(&temp, QIODevice::ReadWrite);
data << source;
return tmp;
}
But I don't know how I can do the same converting on the Java side , because Java hasn't unsigned types. 但是我不知道如何在Java方面进行相同的转换 ,因为Java并非无符号类型。 I tried to use some examples but always got different results.
我尝试使用一些示例,但始终得到不同的结果。 So, I need Java method which returns this for
source
= 17: 因此,我需要将
source
= 17返回的Java方法:
0x00
, 0x00
, 0x00
, 0x11
0x00
0x00
0x00
0x11
I understand that it's a very simple question, but I'm new in Java so it's not clear to me. 我知道这是一个非常简单的问题,但是我是Java的新手,所以我不清楚。
UPD: UPD:
Java: Java的:
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.print(ByteBuffer.allocate(4).putInt(17).array());
Qt C++: Qt C ++:
QByteArray* buffer = new QByteArray();
buffer->append(socket->readAll());
Output: 输出:
buffer
=0x5b
,0x42
,0x40
,0x61
,0x39
,0x65
,0x31
,0x62
,0x66
,0x35
.buffer
=0x5b
,0x42
,0x40
,0x61
,0x39
,0x65
,0x31
,0x62
,0x66
,0x35
。
UPD2: UPD2:
Java: Java的:
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++: same Qt C ++:相同
Output: 输出:
buffer
=0x5b
,0x42
,0x40
,0x63
,0x38
,0x61
,0x39
,0x33
,0x38
,0x33
.buffer
=0x5b
,0x42
,0x40
,0x63
,0x38
,0x61
,0x39
,0x33
,0x38
,0x33
。
UPD3: UPD3:
Qt C++: Qt C ++:
QByteArray buffer = socket->readAll();
for(int i = 0; i < buffer.length(); ++i){
std::cout << buffer[i];
}
std::cout<<std::endl;
Output: 输出:
[B@938a15c
[B @ 938a15c
First of all, don't use PrintWriter
. 首先,不要使用
PrintWriter
。
Here's something to remember about Java I/O: 关于Java I / O,需要记住以下几点:
When you wrap a Stream
in a Reader
or a Writer
, you are taking a byte stream and imposing a character encoding on that byte stream. 当将
Stream
包装在Reader
或Writer
,您正在获取字节流,并在该字节流上施加字符编码。 You don't want that here. 你不想在这里。
Just try this: 尝试一下:
OutputStream out = socket.getOutputStream();
out.write(toBytes(17));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.