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`这三种数值类型与字节数组之间的转换。这里我们将详细讨论这些转换的过程以及其在实际应用中的意义。 首先,`LongInt`是表示32位整数的数据类型,...
然而,当你需要将这个long类型的时间戳转换为int类型时,可能会遇到数据溢出的问题,因为int类型的存储空间只有32位(4个字节),而long类型则有64位(8个字节)。 当long类型的时间戳转换为int类型时,如果long值...
在实际应用中,字节数组和字符串的转换通常与文件操作结合。例如,读取二进制文件到字节数组,然后转换成字符串;或者将字符串转换成字节数组,写入二进制文件。 示例: ```vb ' 读取二进制文件到字节数组 Open ...
3. `htonl()`(Host to Network Long):将主机字节序的长整型(32位)转换为网络字节序。 4. `ntohl()`(Network to Host Long):将网络字节序的长整型转换为主机字节序。 地址转换在IP网络编程中扮演着重要角色...
### 大小端字节序概念与转换 #### 一、引言 在计算机系统中,数据的存储和传输方式至关重要。特别是在网络通信领域,不同的系统可能会采用不同的字节序来存储多字节数据,这可能导致数据解释上的不一致。因此,理解...
Java字节数组与常见类型转换工具,包括byte[] 与int long double float string boolean 等类型的相互转换。
字节序转换辅助类,short大小端转换,ushort大小端转换,int大小端转换,uint大小端转换,long大小端转换,ulong大小端转换; short类型 小端转大端,short类型 大端转小端,int类型 小端转大端,int类型 大端转小端...
在这个场景下,我们需要了解如何在 VC++ 中将字节转换为更易于理解的KB、MB和GB单位。下面将详细解释这个过程,并提供相关的编程知识。 首先,我们来看一下这些单位之间的转换关系: 1 KB (千字节) = 2^10 字节 = ...
1. **位操作**:通过位移和按位与、或、异或等操作来交换字节。这种方法效率高,但需要对位操作有深入理解。 2. **乘法和除法**:通过乘以适当的因子(如256)然后取模来移动字节的位置,但这种方法可能不如位操作...
这其中包括了网络字节顺序(Network Byte Order)与主机字节顺序(Host Byte Order)之间的转换问题。本文将详细介绍这两种字节顺序的概念、区别以及如何进行转换。 #### 一、字节顺序的基本概念 **字节顺序**指的...
这里使用了与`doubleToByte`相反的过程,即通过组合这8个字节形成一个`long`值,并利用`Double.longBitsToDouble`方法将其转换回`double`值。 ```java public static double byteToDouble(byte[] b) { long l; // ...
然而,有时候我们需要将这些字节转换为其他数据类型,如短整型(short)、整型(int)、长整型(long)或者是浮点型(float)、双精度浮点型(double)。例如,当你从网络接收一个字节数组,可能需要将它解析为特定...
char short int long float double 转换成byte数组
一般跨平台通讯程序时,涉及主机字节不一致情况,如Linux下的服务程序和windows下客户端程序通讯时,有可能需要做主机字节高低位交换,本类提供int、float、short、double、long型数据的字节交换处理并提供判断是否...
* 对数字和字节进行转换。 * 基础知识: * 假设数据存储是以大端模式存储的: * byte: 字节类型 占8位二进制 00000000 * char: 字符类型 占2个字节 16位二进制 byte[0] byte[1] * int : ...
linux点分十进制IP转换为long型 网络字节序与主机字节序互转
在Java编程语言中,将`byte[]`数组转换为`int`, `long`, 和 `double`类型的数据是一项常见的任务,特别是在处理二进制数据或网络通信时。以下将详细讲解如何进行这些转换,并提供相关代码示例。 1. **转换byte[]到...
转换LongRaw到Blob通常涉及读取LongRaw数据,将其转换为字节数组,然后将这些字节写入Blob对象。以下是一个简单的Java源码示例,演示了这个过程: ```java import java.sql.*; public class LongRawToBlob { ...
与大端字节序相反,在小端字节序中,数据的低位字节被存放在内存的低地址端,而高位字节被存放在内存的高地址端。以同样的32位数据0x12345678为例,在小端字节序中将被存储为:内存地址0x0000处存储0x78,内存地址0x...
用来对大小端排序的字节数组进行解析的小工具,包括转为Int32,UInt32,float, double, Int16, UInt16, Long等