• java int byte互转详解


    package com.cc8w.test;
    
    public class TestInt2char {
        public static void main(String[] args) {
            int a=129;  
            //                  第一组       第二组     第三组    第四组  
            //2的二进制表示完整为 "[00000000][00000000][00000000][00000010]"[]括号实际没有,为了看起来清楚加的  
            byte[] b=new byte[4];  
            //>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1; 
            //向右移位运算,移动24位后,高8位,被移动到低8位上,二、三、四组都会被丢弃    
            b[0]=(byte) (a>>24);  
            //向右移动16位,高16位到低16位地方,第三、四组会被舍弃,至于&0xff这里不容易看出来,b[3]那一行能看出来  
            b[1]=(byte) ((a>>16)&0xff);  
            //移动8位第四组会被丢弃,结果还是0  
            b[2]=(byte) ((a>>8)&0xff);  
            //不移动直接进行与(&)运算,0xff的二进制是第四位为8个1 其他是0的数,作用就是排除不想要的位  
            //这里来个例子 [00000000][00000110][00000100][00000010]假如有这么个二进制的数字  
            //如果你想取到[00000100]字节的值 , 先对其向右移动8位变为  
            //[00000000][00000000][00000110][00000100] 
            //然后和0xff与运算,0xff二进制[00000000][00000000][00000000][11111111]  
            //与运算后的结果就为[00000000][00000000][00000000][00000100]  
            //这样需要的字节就拿到了  
            
            //0xff十六进制是0x000000ff的简写(十六进制的2字符 可以代表一个字节[8位],上面把00 00 00 ff写成ff)
         //半个字节(即4位)可以表示十六进制的一个字符(0~f),即:
    十六进制的字符占用4位

            b[3]=(byte) (a&0xff);  
            for (byte c : b) {  
                System.out.print(Integer.toBinaryString(c&0xff)+" ");  
            }  
            System.out.println();  
            //把字节转回Int和上面颠倒下,就不多说了。  
            int i=0;  
            i+=((b[0]&0xff)<<24);  
            i+=((b[1]&0xff)<<16);  
            i+=((b[2]&0xff)<<8);  
            i+=((b[3]&0xff));  
            System.out.println(i); 
            
        }
        
        
    }

    下面封装成方法

    一、Int2Byte

    byte[] bytes = new byte[4];
    for (int i = 0; i < 4; i++) {
        bytes[i] = (byte)(integer >>> (i * 8));
    }

    二、 Byte2Int

    int i= (rno[0]<<24)&0xff000000|
           (rno[1]<<16)&0x00ff0000|
           (rno[2]<< 8)&0x0000ff00|
           (rno[3]<< 0)&0x000000ff;

    int x = ((b[0] & 0xFF) << 24) | ((b[1] & 0xFF) << 16) |
            ((b[2] & 0xFF) <<  8) | ((b[3] & 0xFF) <<  0);

    >>>    :     无符号右移,忽略符号位,空位都以0补齐

     https://www.cnblogs.com/fps2tao/p/13361785.html

    转 : https://www.iteye.com/blog/name327-1742945

    https://www.cnblogs.com/helloz/p/10161424.html

  • 相关阅读:
    Ubuntu “Failed to fetch”错误的解决方法
    #ifndef 与#pragma once
    vs TODO list使用
    window脚本编写bat程序执行
    vtk 的qt插件编译
    git bash 下载加速
    条件欧几里得聚类 pcl::ConditionalEuclideanClustering
    ANY数据类型的使用
    《C#编程风格》还记得多少
    驼峰命名法则
  • 原文地址:https://www.cnblogs.com/fps2tao/p/13364487.html
Copyright © 2020-2023  润新知