`

Long与字节 的转换

    博客分类:
  • java
 
阅读更多

 

Long为8个字节,每个字节是8位,则其长度为64位 。

字节为单字节,长度为8位。

 

1 在内存中如果一个长整形的数字,强制转换为字节,则会舍弃掉高56位,保留低8位数字。

2 如果一个字节转换为一个长整形,需要补充高56位,因为java是补码表示形式,补充的56位全都是1,使最终的数据错误

3 如何解决高位补充导致的数据错误,则需要把高56位数变成0即可,所以采用“与0xff”运算,0xff为11111111 ,即8个1,

与运算后原来的低8位留下,其余变成0, 则改正了补充的1导致的异常。

 

1 长整形转换为字节数组:

    //每次截取8位,然后左移8,
    public static byte[] toBytes(long val) {
    	System.out.println( "原来的长整形数据:"+val );
        byte [] b = new byte[8];
        for (int i = 7; i > 0; i--) {
          //强制转型,后留下长整形的低8位
          b[i] = (byte) val;
          String str = Long.toBinaryString( val) ;
          String lb = Long.toBinaryString( b[i] ) ;
          String lb2 = Long.toBinaryString( b[i]&0xff ) ;
 
          
          System.out.println("转换为字节:"+ str );
          System.out.println( lb );
          System.out.println( lb2 );
          //向右移动8位,则第二次循环则计算第二个8位数
          val >>>= 8;
        }
        b[0] = (byte) val;
        return b;
      }

 2 字节数组转换为长整形:

  

    //每次得到的结果左移动8位,然后后面的字节依次拼接到后面
    public static long toLong(byte[] bytes, int offset, final int length) {
        long l = 0;
        for(int i = offset; i < offset + length; i++) {
          //每次计算的结果 向左移动8位,向左移动8位后低8位全为0
          l <<= 8;
          System.out.println( Long.toBinaryString( l )  );
          //上面计算的结果& 0xFF后得到高于8位全为0的结果
          long byteValue =  bytes[i] & 0xFF ;
          System.out.println(  Long.toBinaryString( byteValue )    );
          //当前字节结算后的结果,用异或拼接的l的低8位上面,因为l当前值的低8位全都是0,则异或后l低8位就变成了byteValue的值
          //异或运算符,相应位的值相同的,结果为 0,不相同的结果为 1。
          l ^= byteValue;
          System.out.println( Long.toBinaryString( l )  );
          System.out.println(  );
        }
        return l;
      }

 

 测试主类:

  

    public static void main(String[] args) {
//    	HashRowKeyGenerator  d = new HashRowKeyGenerator() ; 
//    	d.nextId() ; 
    	byte[] bs = toBytes(1482982753743l ) ;
    	long l = toLong(bs, 0, bs.length); 
    	System.out.println( l );
    	
	}

 

 

 

分享到:
评论

相关推荐

    LongInt Float Double与字节数组的转换.rar

    在给定的压缩包文件中,重点讲述了`LongInt`、`Float`和`Double`这三种数值类型与字节数组之间的转换。这里我们将详细讨论这些转换的过程以及其在实际应用中的意义。 首先,`LongInt`是表示32位整数的数据类型,...

    大小端字节序介绍几转换

    ### 大小端字节序概念与转换 #### 一、引言 在计算机系统中,数据的存储和传输方式至关重要。特别是在网络通信领域,不同的系统可能会采用不同的字节序来存储多字节数据,这可能导致数据解释上的不一致。因此,理解...

    络字节序、地址转换源代码

    3. `htonl()`(Host to Network Long):将主机字节序的长整型(32位)转换为网络字节序。 4. `ntohl()`(Network to Host Long):将网络字节序的长整型转换为主机字节序。 地址转换在IP网络编程中扮演着重要角色...

    vb6.0 字节数组和字符串的相互转换.rar

    在实际应用中,字节数组和字符串的转换通常与文件操作结合。例如,读取二进制文件到字节数组,然后转换成字符串;或者将字符串转换成字节数组,写入二进制文件。 示例: ```vb ' 读取二进制文件到字节数组 Open ...

    解决时间戳long转换int溢出(即转换值为负数) long转int

    然而,当你需要将这个long类型的时间戳转换为int类型时,可能会遇到数据溢出的问题,因为int类型的存储空间只有32位(4个字节),而long类型则有64位(8个字节)。 当long类型的时间戳转换为int类型时,如果long值...

    Java字节数组与常见类型转换工具

    Java字节数组与常见类型转换工具,包括byte[] 与int long double float string boolean 等类型的相互转换。

    VC++ 将字节转换成KB、MB和GB

    在这个场景下,我们需要了解如何在 VC++ 中将字节转换为更易于理解的KB、MB和GB单位。下面将详细解释这个过程,并提供相关的编程知识。 首先,我们来看一下这些单位之间的转换关系: 1 KB (千字节) = 2^10 字节 = ...

    高低字节交换SWAP演示.rar

    1. **位操作**:通过位移和按位与、或、异或等操作来交换字节。这种方法效率高,但需要对位操作有深入理解。 2. **乘法和除法**:通过乘以适当的因子(如256)然后取模来移动字节的位置,但这种方法可能不如位操作...

    字节序转换辅助类,字节大端小端转换

    字节序转换辅助类,short大小端转换,ushort大小端转换,int大小端转换,uint大小端转换,long大小端转换,ulong大小端转换; short类型 小端转大端,short类型 大端转小端,int类型 小端转大端,int类型 大端转小端...

    网络字节顺序和主机字节顺序的转换

    这其中包括了网络字节顺序(Network Byte Order)与主机字节顺序(Host Byte Order)之间的转换问题。本文将详细介绍这两种字节顺序的概念、区别以及如何进行转换。 #### 一、字节顺序的基本概念 **字节顺序**指的...

    J2ME 浮点型与字节型之间的底层转换

    这里使用了与`doubleToByte`相反的过程,即通过组合这8个字节形成一个`long`值,并利用`Double.longBitsToDouble`方法将其转换回`double`值。 ```java public static double byteToDouble(byte[] b) { long l; // ...

    字节类型转换及CRC32校验

    然而,有时候我们需要将这些字节转换为其他数据类型,如短整型(short)、整型(int)、长整型(long)或者是浮点型(float)、双精度浮点型(double)。例如,当你从网络接收一个字节数组,可能需要将它解析为特定...

    java实现的字节数组转换成基本类型,基本类型转换成byte[]

    char short int long float double 转换成byte数组

    C++高低位字节交换类

    一般跨平台通讯程序时,涉及主机字节不一致情况,如Linux下的服务程序和windows下客户端程序通讯时,有可能需要做主机字节高低位交换,本类提供int、float、short、double、long型数据的字节交换处理并提供判断是否...

    数字类型 转换 字节数组

    * 对数字和字节进行转换。 * 基础知识: * 假设数据存储是以大端模式存储的: * byte: 字节类型 占8位二进制 00000000 * char: 字符类型 占2个字节 16位二进制 byte[0] byte[1] * int : ...

    linux点分十进制IP转换为long型

    linux点分十进制IP转换为long型 网络字节序与主机字节序互转

    oracle LongRaw 转 Blob 源码

    转换LongRaw到Blob通常涉及读取LongRaw数据,将其转换为字节数组,然后将这些字节写入Blob对象。以下是一个简单的Java源码示例,演示了这个过程: ```java import java.sql.*; public class LongRawToBlob { ...

    浅学字节序——字节序大小端,主机字节序,网络字节序的理解

    与大端字节序相反,在小端字节序中,数据的低位字节被存放在内存的低地址端,而高位字节被存放在内存的高地址端。以同样的32位数据0x12345678为例,在小端字节序中将被存储为:内存地址0x0000处存储0x78,内存地址0x...

    JAVA转byte[]为int,long,double

    在Java编程语言中,将`byte[]`数组转换为`int`, `long`, 和 `double`类型的数据是一项常见的任务,特别是在处理二进制数据或网络通信时。以下将详细讲解如何进行这些转换,并提供相关代码示例。 1. **转换byte[]到...

    C#将B转换成GB、MB和KB(字节转换)

    首先,我们需要理解字节及其与其他单位的关系。1 KB等于1024 B,1 MB等于1024 KB,而1 GB等于1024 MB。因此,进行转换的核心就是对字节数进行适当的乘法运算。以下是一个简单的C#函数,用于将字节数转换为KB、MB或GB...

Global site tag (gtag.js) - Google Analytics