14
回答
Java下怎么发送无符号byte 到设备

 求东软的人解释!因为设备协议是东软出品。。。。

Java的数据类型中压根就没有无符号型的数据类型,这个。。。。还要发送0x8f 占1字节。。。。。

现在的做法是byte b=(byte) 0x8f;

可是不行,人跟我说无符号byte是0-255的,--!

尝试OutputStream.write(int)这种发送发送,还是不行。

求解答,急求~

举报
hanQ
发帖于6年前 14回/5K+阅

以下是问题补充:

  • @hanQ :注意:我是要向设备发送byte,不是接受下来进行计算的,计算简单了,可以转成int型去计算就OK了。 但是,我是要去发送这个无符号的byte!!! (6年前)
  • @hanQ :已经确认,设备问题。谢谢各位。这种与外设数据交换的东西,遇到一个坑爹厂商,真难受 (6年前)
共有14个答案 最后回答: 5年前

引用来自“throwable”的答案

引用来自“throwable”的答案

有符号没符号不都是计算机识别的吗。。。。

其实,我的意思是,你把0x8f赋值到byte变量同时写到了流中,对方接收到的也只是一串二进制数据啊。

0x8f在java识别为-113,到对方系统可能就是143啊,为啥要纠结在Java里的数据呢??

就是这个地方我不清楚是不是我的问题。我将byte b=(byte)0x8f;强转了,协议一直返回FAIL,我才提问,厂商那边给答复是byte 0-255.
--- 共有 1 条评论 ---
excepiton让厂商那边给出接收数据的日志,这样扯皮没尽头啊。。。 6年前 回复

引用来自“dargoner”的答案

移位
我用过 0x8f & 0x7f 进行位于运算,可是java直接识别成了一个int型,移位的话,应该也是一样的吧
你需要无符号数字的时候,不要把 byte看成是一个数字,就把byte看成是一个字节,一个8位的字节,然后该怎么传还是怎么传,在java里byte的负数部分第一位是1,都看成无符号数的后面部分就可以了,如果为了调试可以将这个byte扩展到short看结果

引用来自“throwable”的答案

有符号没符号不都是计算机识别的吗。。。。

其实,我的意思是,你把0x8f赋值到byte变量同时写到了流中,对方接收到的也只是一串二进制数据啊。

0x8f在java识别为-113,到对方系统可能就是143啊,为啥要纠结在Java里的数据呢??

引用来自“明月照大江”的答案

你需要无符号数字的时候,不要把 byte看成是一个数字,就把byte看成是一个字节,一个8位的字节,然后该怎么传还是怎么传,在java里byte的负数部分第一位是1,都看成无符号数的后面部分就可以了,如果为了调试可以将这个byte扩展到short看结果
已做强转符号位 0x8f & 0x7f 但是,返回值是个int型--!
看协议让你发送什么,假如协议让你发送无符号byte,大小为0x8f,0x8f八位二进制为(10001111),在java中10001111等于-113,所以发送byte(-113)就行了。
顶部