电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Java任意長度byte數(shù)組轉(zhuǎn)換為int數(shù)組的方法

瀏覽:114日期:2022-08-28 10:11:13

前言

嗯。最近工程上遇到一個byte數(shù)組轉(zhuǎn)換為int的問題,解決過程中遇到了幾個坑,經(jīng)過各種查資料終于還是解決了。撒花。

Java的位運(yùn)算以及byte數(shù)組與其他類型數(shù)據(jù)的轉(zhuǎn)換比c/c++感覺麻煩一些。這里簡單說明一下byte數(shù)組和int的轉(zhuǎn)換吧。

總所周知,int類型數(shù)據(jù)在Java中占據(jù)32 bit,byte占據(jù)8 bit,這樣的話,正常情況下4個byte可以轉(zhuǎn)換成一個int類型數(shù)據(jù)。

當(dāng)然,不正常情況下,3個byte或者2個byte甚至1個byte都可以轉(zhuǎn)換為int數(shù)據(jù),只需要高位補(bǔ)上就行。

嗯,坑來了。由于Java中int類型是有符號的,最高位為符號位,為0的話表示正數(shù),為1的話表示負(fù)數(shù)。

以四位byte數(shù)組為例,要拼接成一個32 bit的int數(shù)據(jù)的話,只需要將四個byte按順序連接起來就行,這樣的話,就需要對四個byte進(jìn)行移位操作。

第一位左移24位,第二位左移16位,第三位左移8位,第四位不動。。然后進(jìn)行或運(yùn)算。。

嗯,看起來好像完美。。。然而之前說過Java是有符號的,對于后三個byte,如果是負(fù)數(shù)的話,則高位都是1,這樣高位的或運(yùn)算將失效,前面的byte數(shù)據(jù)也就沒有意義。

因此,對于后三個byte數(shù)據(jù),進(jìn)行移位操作前需要和0XFF進(jìn)行與運(yùn)算,消除高24位。

代碼如下

public int bytesToInt(byte[] bytes){ return bytes[0]<<24|(bytes[1]&0xff)<<16|(bytes[2]&0xff)<<8|(bytes[3]&0xff); }

對于不正常的情況,比如3個byte轉(zhuǎn)換為int,則第一個左移16位,第二位與0xff后左移8位,第三位與0xff,然后進(jìn)行或運(yùn)算即可。

同理可運(yùn)用于2個byte。

對于1個byte,直接強(qiáng)制轉(zhuǎn)換為int即可。

嗯。。大概就是這樣,第一位移位,之后的分別和0xff相與后再移位,最后進(jìn)行或運(yùn)算即可。

后來,閑著無聊,如果一個byte數(shù)組超過4位后,怎么辦?當(dāng)然返回一個int數(shù)組就行啦,反正4位byte轉(zhuǎn)換成1個int,看著辦就行。

public int[] bytesToInts(byte[] bytes){ int bytesLength=bytes.length; int[] ints=new int[bytesLength%4==0? bytesLength/4:bytesLength/4+1]; int lengthFlag=4; while (lengthFlag<=bytesLength){ ints[lengthFlag/4-1]=(bytes[lengthFlag-4]<<24)|(bytes[lengthFlag-3]&0xff)<<16| (bytes[lengthFlag-2]&0xff)<<8|(bytes[lengthFlag-1]&0xff); lengthFlag+=4; } for (int i=0;i<bytesLength+4-lengthFlag;i++){ if (i==0) ints[lengthFlag/4-1]|=bytes[lengthFlag-4+i]<<8*(bytesLength+4-lengthFlag-i-1); else ints[lengthFlag/4-1]|=(bytes[lengthFlag-4+i]&0xff)<<8*(bytesLength+4-lengthFlag-i-1); } return ints; }

嗯。。有空再來寫寫Java的bit提取。。

總結(jié)

到此這篇關(guān)于Java任意長度byte數(shù)組轉(zhuǎn)換為int數(shù)組的文章就介紹到這了,更多相關(guān)Java byte數(shù)組轉(zhuǎn)換為int數(shù)組內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 复盛空压机配件-空气压缩机-复盛空压机(华北)总代理 | 上海橡胶接头_弹簧减震器_金属软接头厂家-上海淞江集团 | 香港新时代国际美容美发化妆美甲培训学校-26年培训经验,值得信赖! | 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 软文发布平台 - 云软媒网络软文直编发布营销推广平台 | 别墅图纸超市|别墅设计图纸|农村房屋设计图|农村自建房|别墅设计图纸及效果图大全 | 冻干机(冷冻干燥机)_小型|实验型|食品真空冷冻干燥机-松源 | 选矿设备-新型重选设备-金属矿尾矿重选-青州冠诚重工机械有限公司 | 深圳办公室装修,办公楼/写字楼装修设计,一级资质 - ADD写艺 | TMT观察网_独特视角观察TMT行业 派财经_聚焦数字经济内容服务平台 | 西门子气候补偿器,锅炉气候补偿器-陕西沃信机电工程有限公司 | 危废处理系统,水泥厂DCS集散控制系统,石灰窑设备自动化控制系统-淄博正展工控设备 | 变频器维修公司_plc维修_伺服驱动器维修_工控机维修 - 夫唯科技 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 磁力反应釜,高压釜,实验室反应釜,高温高压反应釜-威海自控反应釜有限公司 | 洛阳网站建设_洛阳网站优化_网站建设平台_洛阳香河网络科技有限公司 | 蓝鹏测控平台 - 智慧车间系统 - 车间生产数据采集与分析系统 | 分类168信息网 - 分类信息网 免费发布与查询 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 太原装修公司_山西整装家装设计_太原室内装潢软装_肖邦家居 | 步进_伺服_行星减速机,微型直流电机,大功率直流电机-淄博冠意传动机械 | 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 安徽泰科检测科技有限公司【官方网站】 | 丹佛斯压力传感器,WISE温度传感器,WISE压力开关,丹佛斯温度开关-上海力笙工业设备有限公司 | 环境模拟实验室_液体-气体控温机_气体控温箱_无锡双润冷却科技有限公司 | RFID电子标签厂家-上海尼太普电子有限公司 | 实验室隔膜泵-无油防腐蚀隔膜泵-耐腐蚀隔膜真空泵-杭州景程仪器 电杆荷载挠度测试仪-电杆荷载位移-管桩测试仪-北京绿野创能机电设备有限公司 | 首页-瓜尔胶系列-化工单体系列-油田压裂助剂-瓜尔胶厂家-山东广浦生物科技有限公司 | 双工位钻铣攻牙机-转换工作台钻攻中心-钻铣攻牙机一体机-浙江利硕自动化设备有限公司 | 胜为光纤光缆_光纤跳线_单模尾纤_光纤收发器_ODF光纤配线架厂家直销_北京睿创胜为科技有限公司 - 北京睿创胜为科技有限公司 | 广州番禺搬家公司_天河黄埔搬家公司_企业工厂搬迁_日式搬家_广州搬家公司_厚道搬迁搬家公司 | 屏蔽服(500kv-超高压-特高压-电磁)-徐吉电气 | 除尘布袋_液体过滤袋_针刺毡滤料-杭州辉龙过滤技术有限公司 | 杭州翻译公司_驾照翻译_专业人工翻译-杭州以琳翻译有限公司官网 组织研磨机-高通量组织研磨仪-实验室多样品组织研磨机-东方天净 | 冷藏车-东风吸污车-纯电动环卫车-污水净化车-应急特勤保障车-程力专汽厂家-程力专用汽车股份有限公司销售二十一分公司 | 厦门ISO认证|厦门ISO9001认证|厦门ISO14001认证|厦门ISO45001认证-艾索咨询专注ISO认证行业 | 蒸压釜_蒸养釜_蒸压釜厂家-山东鑫泰鑫智能装备有限公司 | 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 宽带办理,电信宽带,移动宽带,联通宽带,电信宽带办理,移动宽带办理,联通宽带办理 | 玉米加工设备,玉米深加工机械,玉米糁加工设备.玉米脱皮制糁机 华豫万通粮机 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 |