概述
在使用代码和硬件通讯时,通常碰到c++中使用无符号字节unsigned byte 进行数据发送与接受,但JAVA没有无符号字节,怎么把131(java的字节只能存 -128 ~127 )发送给机器呢,怎么接收机器发过来的131呢?
其实,只要稍作处理应该可以了。只要在发送时,把131用int存,强转为byte, (byte)131, 发送过去即可,c++无符号字节接收到表现回131。在接收时, 接收到的131为负数,只要 把该负数& 0xff用int存即可获得131。
·
原理如下(用255测试,java字节byte存不了255):
import org.junit.Test;
public class JunitTest {
@Test
public void unsignedByteTest(){
/**
* 测试java如何发超过127的byte给c++接收
* 原理:java中发送字节255到c++中的unsigned byte接收,255表示为1111 1111 ,在java中符号位1表示负数,负数存的是补码
* 补码-1再全部取反为原码,所以~(1111 1111 - 1) = 0000 0001,所以java中把-1发给c++的unsigned byte接收就是255了
* 总结:java发字节255,需要实际发-1(强转为byte)即可
*/
int input = 255;
byte send = (byte)input;
System.out.println(send);
/**
* 测试java如何接收超过127的c++无符号字节
* 原理:java 的byte 接收255,存储为1111 1111 ,java 的字节表示为-1,转回255用int存储即可。直接转为int ,会高位补和符号位一样的数,
* 即变为1111 1111 1111 1111,这样转为int得到不是255,而是-1,需要与0xff(0000 0000 1111 1111)相与(&),把高位变为0,
* 得到 0000 0000 1111 1111,再转为int即可得到255
*
* 总结:java接受字节255,接受后为-1 , & 0xff后即可还原为255
*/
byte javaReceive = (byte) 255; //c++发过来的255,java中接收到为-1
int out = javaReceive; //直接强转int得到-1,不是255
int expected = javaReceive & 0xff; // 得到255,期待的结果
System.out.println(out);
System.out.println(expected);
}
}
测试结果:
最后
以上就是害羞小甜瓜为你收集整理的java将byte转为无符号字节——解决java没有unsigned byte问题的全部内容,希望文章能够帮你解决java将byte转为无符号字节——解决java没有unsigned byte问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复