我是靠谱客的博主 害羞小甜瓜,最近开发中收集的这篇文章主要介绍java将byte转为无符号字节——解决java没有unsigned byte问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在使用代码和硬件通讯时,通常碰到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问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部