搜索
bottom↓
回复: 18

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

[复制链接]

出0入0汤圆

发表于 2017-11-9 11:38:12 | 显示全部楼层 |阅读模式
刚刚用了java的byte转正数,发现直接打印使用(a)& 0xff 打印就对的 ,但是怎么再存储起来啊???  小白一个希望有人可以帮忙。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2017-11-9 11:47:04 | 显示全部楼层
用 short int 或 int

出0入0汤圆

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

出0入0汤圆

发表于 2017-11-9 11:54:35 | 显示全部楼层
没看明白什么意思,首先你得知道 Java 中的 byte, short, int 类型都是有符号整数
(a & 0xFF) 其实是把 a 转为 int 型后再 & 0x000000FF, 最高位的符号位就为 0 了,看起来就像是无符号的二进制值了

出0入0汤圆

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

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

出0入0汤圆

 楼主| 发表于 2017-11-9 11:59:04 | 显示全部楼层
duanll 发表于 2017-11-9 11:47
用 short int 或 int

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

出0入0汤圆

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

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

出0入0汤圆

发表于 2017-11-9 12:16:59 | 显示全部楼层
-佛听- 发表于 2017-11-9 11:59
不行 写进去 APP闪退 提示有错误

int b = byte1 & 0xff;

出0入0汤圆

 楼主| 发表于 2017-11-9 12:20:06 | 显示全部楼层
duanll 发表于 2017-11-9 12:16
int b = byte1 & 0xff;

就是这么写的  直接闪退               

出0入0汤圆

发表于 2017-11-9 12:24:42 | 显示全部楼层
-佛听- 发表于 2017-11-9 12:20
就是这么写的  直接闪退

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

出0入0汤圆

发表于 2017-11-9 13:31:20 | 显示全部楼层
int b = byte1 & 255;

出0入0汤圆

 楼主| 发表于 2017-11-9 13:43:56 | 显示全部楼层
duanll 发表于 2017-11-9 12:24
发完整点的代码来看看。。


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

错误的如下:
byte[] ResBuff = new byte[64];
int[] buf = new int[64];
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[64];
int[] buf = new int[64];
ResBuff = (byte[]) msg.obj;
theActivity.Reseive.append(msg.obj.toString());

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

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

出0入0汤圆

发表于 2017-11-9 14:14:03 | 显示全部楼层
-佛听- 发表于 2017-11-9 13:43
找到原因了 ,因为粗心造成的,

错误的如下:

恭喜!

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

出0入0汤圆

 楼主| 发表于 2017-11-9 16:15:12 | 显示全部楼层
duanll 发表于 2017-11-9 14:14
恭喜!

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

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

出0入0汤圆

发表于 2017-12-26 16:11:39 | 显示全部楼层
-佛听- 发表于 2017-11-9 16:15
有道理,以后注意下,小细节害死人

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

出0入0汤圆

 楼主| 发表于 2017-12-26 16:15:23 | 显示全部楼层
强制把BYTE数组转int数组里面 然后处理

出0入0汤圆

发表于 2017-12-26 17:03:22 | 显示全部楼层
-佛听- 发表于 2017-12-26 16:15
强制把BYTE数组转int数组里面 然后处理

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

出0入0汤圆

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

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

出0入0汤圆

发表于 2017-12-26 17:22:19 | 显示全部楼层
mohao123 发表于 2017-12-26 17:16
JAVA有Modbus4J,用起来方便,还开放源码。

看起来不错,我要他试一试 谢谢了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-23 19:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表