java取出一个字节的某几位

本文详细介绍了一种从long类型变量中分离特定位段的方法,包括如何获取前13位、中间8位和后11位的具体实现。通过位运算符和移位操作,文章提供了一个实用的代码示例,并解释了每一步操作背后的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做项目中要取一个long类型的几位,分别取出这几位的值,通过询问同事和问度娘,自己总结了一下:
需求:
我们知道long类型占四个字节,一个字节8位,所以long类型32位,这里要求取出前13位,中间8位,后11位
代码:

public void getSplitId(long id) {
		Integer deviedId;
		//前13位
		Integer areaId = (int) (id >> 19);
		//中间8位
		deviedId = (int) ((id >> 11) & 0xff);
		//后11位
		Integer channelId = (int) (id & 0x00001fff);
	}

这里再分析一下具体细节
例如:10010011
取前三位
10010011&11100000(0xE0),得到10000000,再右移5位,表达式为(10010011&0xE0)>>5
取后三位
10010011&00000111(0x07),得到00000011,表达式为10010011&0x07
取中间三位
10010011&00011100(0x1C),得到00010000,再右移三位,表达式是(10010011&0x1C)>>3

如有错误或者不恰当处,希望各位指出,谢谢

更多IT资讯请关注
在这里插入图片描述

如果你从数据库中读取了一张图片,其格式为BLOB,需要将其转换为byte[],并且去掉前几位字符,可以按照以下步骤进行操作: 1. 从数据库中读取BLOB字段,得到一个java.sql.Blob对象: ```java PreparedStatement pstmt = conn.prepareStatement("SELECT image_data FROM images WHERE id = ?"); pstmt.setInt(1, 1); // 假设要读取id为1的图片数据 ResultSet rs = pstmt.executeQuery(); if (rs.next()) { Blob blob = rs.getBlob("image_data"); // 这里需要注意,如果BLOB字段可能为null,需要判断一下 if (blob != null) { // 接下来的操作 } } ``` 2. 将BLOB转换为byte[]: ```java byte[] bytes = blob.getBytes(1, (int) blob.length()); ``` 在上述代码中,getBytes()方法将BLOB转换为byte[]。第一个参数表示要读取的起始位置,一般为1;第二个参数表示要读取的字节数,这里我们直接读取整个BLOB字段的内容。 3. 去掉前几位字符: 如果你知道前几位字符的长度,可以使用Arrays.copyOfRange()方法来去掉这些字符: ```java int offset = 5; // 假设要去掉前5个字符 byte[] data = Arrays.copyOfRange(bytes, offset, bytes.length); ``` 在上述代码中,我们使用Arrays.copyOfRange()方法来复制从offset位置开始到数组末尾的所有元素,得到一个新的byte[]。 如果你不知道前几位字符的长度,可以先将byte[]转换为字符串,然后使用substring()方法去掉前几个字符,最后再将字符串转换回byte[]: ```java String str = new String(bytes); int offset = 5; // 假设要去掉前5个字符 byte[] data = str.substring(offset).getBytes(); ``` 在上述代码中,我们先将byte[]转换为字符串,去掉前几个字符,然后再将字符串转换回byte[]。需要注意的是,这种方法可能会改变图片的格式,因为图片格式的前几个字节通常是固定的。所以,如果你不确定前几位字符的长度,最好不要使用这种方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值