-佛听- 发表于 2017-11-9 11:38:12

问个关于JAVA的byte负数转正数

刚刚用了java的byte转正数,发现直接打印使用(a)& 0xff 打印就对的 ,但是怎么再存储起来啊???小白一个希望有人可以帮忙。

duanll 发表于 2017-11-9 11:47:04

用 short int 或 int

jcrorxp 发表于 2017-11-9 11:54:07

之前也是安卓那边出来的是 有符号数, 我单片机这边需要无符号数, 跟他们聊了半天他们也不知道什么是无符号数诶,

wudicgi 发表于 2017-11-9 11:54:35

没看明白什么意思,首先你得知道 Java 中的 byte, short, int 类型都是有符号整数
(a & 0xFF) 其实是把 a 转为 int 型后再 & 0x000000FF, 最高位的符号位就为 0 了,看起来就像是无符号的二进制值了

-佛听- 发表于 2017-11-9 11:57:30

wudicgi 发表于 2017-11-9 11:54
没看明白什么意思,首先你得知道 Java 中的 byte, short, int 类型都是有符号整数
(a & 0xFF) 其实是把 a...

对的再怎么存储起来呢   java 没有无符号的整数

-佛听- 发表于 2017-11-9 11:59:04

duanll 发表于 2017-11-9 11:47
用 short int 或 int

不行 写进去 APP闪退 提示有错误

-佛听- 发表于 2017-11-9 11:59:57

jcrorxp 发表于 2017-11-9 11:54
之前也是安卓那边出来的是 有符号数, 我单片机这边需要无符号数, 跟他们聊了半天他们也不知道什么是无符号 ...

我知道,但是不知道怎么保存发出去没问题收回来的时候 出现负数了 能强制转换成正数 但是保存出错

duanll 发表于 2017-11-9 12:16:59

-佛听- 发表于 2017-11-9 11:59
不行 写进去 APP闪退 提示有错误

int b = byte1 & 0xff;

-佛听- 发表于 2017-11-9 12:20:06

duanll 发表于 2017-11-9 12:16
int b = byte1 & 0xff;

就是这么写的直接闪退               

duanll 发表于 2017-11-9 12:24:42

-佛听- 发表于 2017-11-9 12:20
就是这么写的直接闪退

发完整点的代码来看看。。

modbus 发表于 2017-11-9 13:31:20

int b = byte1 & 255;

-佛听- 发表于 2017-11-9 13:43:56

duanll 发表于 2017-11-9 12:24
发完整点的代码来看看。。

找到原因了 ,因为粗心造成的,

错误的如下:
byte[] ResBuff = new byte;
int[] buf = new int;
ResBuff = (byte[]) msg.obj;
theActivity.Reseive.append(msg.obj.toString());

for(int i = 0; i<128; i++)
{
   buf = (byte)(ResBuff&255);
}

正确的:
byte[] ResBuff = new byte;
int[] buf = new int;
ResBuff = (byte[]) msg.obj;
theActivity.Reseive.append(msg.obj.toString());

for(int i = 0; i<64; i++)
{
   buf = (byte)(ResBuff&255);
}

是由于数组的索引超限了 ,误以为是转换失败,还是很感谢各位的回答

duanll 发表于 2017-11-9 14:14:03

-佛听- 发表于 2017-11-9 13:43
找到原因了 ,因为粗心造成的,

错误的如下:


恭喜!

这种循环,别用常数,用 buf.length 或 ResBuff.length 是不是更安全呢?

-佛听- 发表于 2017-11-9 16:15:12

duanll 发表于 2017-11-9 14:14
恭喜!

这种循环,别用常数,用 buf.length 或 ResBuff.length 是不是更安全呢? ...

有道理,以后注意下,小细节害死人

jiangzhimin 发表于 2017-12-26 16:11:39

-佛听- 发表于 2017-11-9 16:15
有道理,以后注意下,小细节害死人

楼主,最近同事也用JAVA 写MUDBUS 上位机请求,但是返回的数据byte 都是有符号数,变成负数,后丢字节
有什么好的处理办法?

-佛听- 发表于 2017-12-26 16:15:23

强制把BYTE数组转int数组里面 然后处理

jiangzhimin 发表于 2017-12-26 17:03:22

-佛听- 发表于 2017-12-26 16:15
强制把BYTE数组转int数组里面 然后处理

我知道你的意思,也在网上查找了相关的例子 把byte 转化成 Int ,
但是传回来的数据 在byte 中有个是负数或相关原因 吧个别数就都丢失了, 返回的数据就有错误

mohao123 发表于 2017-12-26 17:16:24

jiangzhimin 发表于 2017-12-26 16:11
楼主,最近同事也用JAVA 写MUDBUS 上位机请求,但是返回的数据byte 都是有符号数,变成负数,后丢字节
有 ...

JAVA有Modbus4J,用起来方便,还开放源码。

jiangzhimin 发表于 2017-12-26 17:22:19

mohao123 发表于 2017-12-26 17:16
JAVA有Modbus4J,用起来方便,还开放源码。

看起来不错,我要他试一试 谢谢了{:smile:}
页: [1]
查看完整版本: 问个关于JAVA的byte负数转正数