一个int,char型数无需转成byte的信息发送方法:writeChar()

hhyyqq5800 2015-07-01 09:40:07
学了android有一个多月了,还算是有所收获,参照了很多高手、大师的文章,凑了个蓝牙串口程序,手机发送的信息能够被蓝牙模块收到了,得意一下。
但问题接着来了,我发送的Int数组,经过一系转换(int[]-char[]-hexstring-byte[]),最后成byte型,发送的信息跟原int信息已经完全变样了,而且长度也改变了,我试了蛮多方法,还没找到信息还原方法,不过,在这个过程有新的发现(当然只是对我这个灰灰常菜的鸟来说滴),我想如果不通过那么多变换成byte而直接发送的话,也许还原会容易些,因此,我开始找这个方法,因为我相信,android肯定不会只有这一种write()的方法,于是我想到API中找找,果然我在一本java技术手册中找到了,分享给大家,大师高手们可以无视!
下图是io包的框架:

从图中可以看出,IO包里有各种read和write方法,我用了dataoutputstream中的方法,这个类中的也有很多方法,基本是int,char,string等类型的数据都可以直接发送,不用选进行数据类型的转换。下图是这个类中的所有write方法:

用writeChar()方法我编写的蓝牙串口信息发送程序是这样滴:


我发送的信息是这个图中的returnedDat={65535,2,1234,5678);蓝牙模块接收到的信息看这里:

这样看来,这个方法是完全可用滴,而且比较简洁,但需要注意的是,我用的这个方法只能直接发单个int数据,不能一条语句把整个数组发出去,但对串口而言,本来也不是并行的操作。
方法就介绍到这里,但我的纠结仍然存在,看接收到的信息跟发送的信息完全不一样,且长度也多了两个字节,由于不知道它的转换机制,我还是不能把它还原!希望大师们指点迷津!

...全文
356 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhyyqq5800 2015-07-05
  • 打赏
  • 举报
回复
引用 8 楼 hjq2013 的回复:
.getByte()的时候可以带上编码参数 读取完字节数组,创建String的时候也可以带上编码参数,两边对应就可以 [quote=引用 7 楼 hhyyqq 的回复:] 我发送前的处理是这样的: String we="这是一个串口通信试验,看能不能解码“; byte[] result=we.getByte(); OutputStream outpn=socket.getOutputStream(); outpn.write(result); 蓝牙模块接收到的字符是这样滴: 问题在哪?如果是编码问题,怎么才能双方统一?蓝牙模块和串口软件的码不能控制,我用你列出的utf-8和gbk都试过,也是乱的
[/quote]谢谢你的耐心解答,问题解决了,是波特率的问题!
hhyyqq5800 2015-07-03
  • 打赏
  • 举报
回复
引用 6 楼 hjq2013 的回复:
引用 5 楼 hhyyqq 的回复:
[quote=引用 1 楼 hjq2013 的回复:] 你读的时候是怎么处理的???
刚才那个回答看错了,以为说的写。现在我还不知道读的时候应该怎么处理,因为我不知道接收到的信息跟发送的信息是怎么映射的,如果是用byte方法发送的话,试过先把byte还原成字符串,再还原成int,但还原成一串乱码就不往下走了,不能还原成原来发送的原始int信息,用的方法肯定有问题,也还在试其他的方法
编码问题,两边确定下就ok ,两边都用utf-8,或者gbk的,传的时候按照utf-8或gbk转成byte ,收到按照utf-8或者gbk解码[/quote] 我发送前的处理是这样的: String we="这是一个串口通信试验,看能不能解码“; byte[] result=we.getByte(); OutputStream outpn=socket.getOutputStream(); outpn.write(result); 蓝牙模块接收到的字符是这样滴: 问题在哪?如果是编码问题,怎么才能双方统一?蓝牙模块和串口软件的码不能控制,我用你列出的utf-8和gbk都试过,也是乱的
Hare_ 2015-07-03
  • 打赏
  • 举报
回复
.getByte()的时候可以带上编码参数 读取完字节数组,创建String的时候也可以带上编码参数,两边对应就可以
引用 7 楼 hhyyqq 的回复:
我发送前的处理是这样的: String we="这是一个串口通信试验,看能不能解码“; byte[] result=we.getByte(); OutputStream outpn=socket.getOutputStream(); outpn.write(result); 蓝牙模块接收到的字符是这样滴: 问题在哪?如果是编码问题,怎么才能双方统一?蓝牙模块和串口软件的码不能控制,我用你列出的utf-8和gbk都试过,也是乱的
Hare_ 2015-07-02
  • 打赏
  • 举报
回复
引用 5 楼 hhyyqq 的回复:
引用 1 楼 hjq2013 的回复:
你读的时候是怎么处理的???
刚才那个回答看错了,以为说的写。现在我还不知道读的时候应该怎么处理,因为我不知道接收到的信息跟发送的信息是怎么映射的,如果是用byte方法发送的话,试过先把byte还原成字符串,再还原成int,但还原成一串乱码就不往下走了,不能还原成原来发送的原始int信息,用的方法肯定有问题,也还在试其他的方法
编码问题,两边确定下就ok ,两边都用utf-8,或者gbk的,传的时候按照utf-8或gbk转成byte ,收到按照utf-8或者gbk解码
hhyyqq5800 2015-07-02
  • 打赏
  • 举报
回复
引用 1 楼 hjq2013 的回复:
你读的时候是怎么处理的???
刚才那个回答看错了,以为说的写。现在我还不知道读的时候应该怎么处理,因为我不知道接收到的信息跟发送的信息是怎么映射的,如果是用byte方法发送的话,试过先把byte还原成字符串,再还原成int,但还原成一串乱码就不往下走了,不能还原成原来发送的原始int信息,用的方法肯定有问题,也还在试其他的方法
hhyyqq5800 2015-07-02
  • 打赏
  • 举报
回复
引用 2 楼 BEYONDMA 的回复:
最好用byte做,char最好不跨语言平台
嗯,明白!但这个是int整数,不涉及跨平台的编码问题
hhyyqq5800 2015-07-02
  • 打赏
  • 举报
回复
引用 1 楼 hjq2013 的回复:
你读的时候是怎么处理的???
没有处理,直接一个个把int数组放到writechar()中了
beyondma 2015-07-02
  • 打赏
  • 举报
回复
最好用byte做,char最好不跨语言平台
Hare_ 2015-07-02
  • 打赏
  • 举报
回复
你读的时候是怎么处理的???

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧