各位大虾:
我的方法如下:
byte b[] = new byte[2];
b[0] = (byte) (n >> 8);
b[1] = (byte) n;
return b;
我把b[]转换成String通过socket传到客户端后,客户端受到的 数据有的正确,有的不正确,不知道哪里出错了???
请指点。
如:(short)9999 ->发送 -〉接受正常
(short)1234 ->发送-〉接受不正常
我的方法如下:
byte b[] = new byte[2];
b[0] = (byte) (n >> 8);
b[1] = (byte) n;
return b;
我把b[]转换成String通过socket传到客户端后,客户端受到的 数据有的正确,有的不正确,不知道哪里出错了???
请指点。
如:(short)9999 ->发送 -〉接受正常
(short)1234 ->发送-〉接受不正常
我不明白你的真正意图。
byte[] b = new byte[2];
b[0] = (byte)((n & 0xFF00) >> 8);
b[1] = (byte)(n & 0xFF);byte to short:
n = (short)(((b[0] < 0 ? b[0] + 256 : b[0]) << 8) + (b[1] < 0 ? b[1] + 256 : b[1]));
to powerless2008:
我用你的方法,将(short)1235传过去,对方得到的是1087。
to jiangnaisong:
我的主要目的是求一个将short 不失精度的转换为byte[]的方法。因为我上面的方法进行转换后,对方得到的值有的正常,有的不正常。
照你说的,我用了DataOutputStream ,之前我用的是PrintWriter。
dos.writeShort()可以让short正确传送,但有新问题:
我有一个报文,格式 消息头 int(4byte)+int(4byte)+short(2byte)
消息体 msgid(string 24) + result(string 1)
为用DataOutputStream进行传送,对于 int(4byte)+int(4byte),我直接用dos.writeBytes();
对于 short(2byte),我用dos.writeShort()
对于消息体,我用 dos.writeBytes(消息体串,如:"200820082008200820082008" +"1" )
发送的demo 如:
dos.writeBytes(...);
dos.writeShort(s);
dos.writeBytes(...);
对方socket接收后,发现消息体内容有时正常,有时异常,这是为何?是不是dos这样发送同一报文的不同部分,不正确阿?请执教
答:没有问题。如:
dos.writeInt(int值);//4个字节
dos.writeInt(int值);//4个字节 dos.writeShort(s); //2个字节
dos.writeUTF(串);
对方收时用:DataInpuutStream流不相应读取就行了。
我的方法是:short seq = (short) ( ( (0x000000FF & b3[0])<<8) | ( 0x000000FF & b3[1]) );
这是我测试了好久才得到的正确方法。对方用c语言发送的short类型。
to jiangnaisong:
对方socket client端是已经写好的(linux c),我方控制不了。
我用
dos.writeInt(int值);//4个字节
dos.writeInt(int值);//4个字节
dos.writeShort(s); //2个字节
dos.writeUTF(串); 方式发送给他,
dos.writeInt(int值);//4个字节
dos.writeInt(int值);//4个字节
dos.writeShort(s); //2个字节
没问题,但dos.writeUTF(串); 发送的消息体有时对方接受正常,有时不正常,也不知道为啥。
但printwriter的println方法没有问题,所以现在我得用
dos.writeInt();
dos.writeInt();
dos.writeShort();
去发送报文头;
用printWriter.println()去发送报文体,很麻烦,有好办法嘛?
答:dennyjava兄弟,你早点讲一下是java与对方c之间通信,我们就更能早点解决问题了。
消息体传送:
如:String messageBody="你好吗?";
则发送用(对方用c来收):
dos.write(messageBody.getBytes("GBK"));//或对方linux c能正确认识的字符编码以上仅供你参考