问个关于JAVA的byte负数转正数
刚刚用了java的byte转正数,发现直接打印使用(a)& 0xff 打印就对的 ,但是怎么再存储起来啊???小白一个希望有人可以帮忙。 用 short int 或 int 之前也是安卓那边出来的是 有符号数, 我单片机这边需要无符号数, 跟他们聊了半天他们也不知道什么是无符号数诶, 没看明白什么意思,首先你得知道 Java 中的 byte, short, int 类型都是有符号整数(a & 0xFF) 其实是把 a 转为 int 型后再 & 0x000000FF, 最高位的符号位就为 0 了,看起来就像是无符号的二进制值了
wudicgi 发表于 2017-11-9 11:54
没看明白什么意思,首先你得知道 Java 中的 byte, short, int 类型都是有符号整数
(a & 0xFF) 其实是把 a...
对的再怎么存储起来呢 java 没有无符号的整数 duanll 发表于 2017-11-9 11:47
用 short int 或 int
不行 写进去 APP闪退 提示有错误 jcrorxp 发表于 2017-11-9 11:54
之前也是安卓那边出来的是 有符号数, 我单片机这边需要无符号数, 跟他们聊了半天他们也不知道什么是无符号 ...
我知道,但是不知道怎么保存发出去没问题收回来的时候 出现负数了 能强制转换成正数 但是保存出错 -佛听- 发表于 2017-11-9 11:59
不行 写进去 APP闪退 提示有错误
int b = byte1 & 0xff;
duanll 发表于 2017-11-9 12:16
int b = byte1 & 0xff;
就是这么写的直接闪退 -佛听- 发表于 2017-11-9 12:20
就是这么写的直接闪退
发完整点的代码来看看。。 int b = byte1 & 255; 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);
}
是由于数组的索引超限了 ,误以为是转换失败,还是很感谢各位的回答 -佛听- 发表于 2017-11-9 13:43
找到原因了 ,因为粗心造成的,
错误的如下:
恭喜!
这种循环,别用常数,用 buf.length 或 ResBuff.length 是不是更安全呢? duanll 发表于 2017-11-9 14:14
恭喜!
这种循环,别用常数,用 buf.length 或 ResBuff.length 是不是更安全呢? ...
有道理,以后注意下,小细节害死人 -佛听- 发表于 2017-11-9 16:15
有道理,以后注意下,小细节害死人
楼主,最近同事也用JAVA 写MUDBUS 上位机请求,但是返回的数据byte 都是有符号数,变成负数,后丢字节
有什么好的处理办法? 强制把BYTE数组转int数组里面 然后处理 -佛听- 发表于 2017-12-26 16:15
强制把BYTE数组转int数组里面 然后处理
我知道你的意思,也在网上查找了相关的例子 把byte 转化成 Int ,
但是传回来的数据 在byte 中有个是负数或相关原因 吧个别数就都丢失了, 返回的数据就有错误 jiangzhimin 发表于 2017-12-26 16:11
楼主,最近同事也用JAVA 写MUDBUS 上位机请求,但是返回的数据byte 都是有符号数,变成负数,后丢字节
有 ...
JAVA有Modbus4J,用起来方便,还开放源码。 mohao123 发表于 2017-12-26 17:16
JAVA有Modbus4J,用起来方便,还开放源码。
看起来不错,我要他试一试 谢谢了{:smile:}
页:
[1]