国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java 字節(jié)數(shù)組(byte[])和整型(int)的相互轉(zhuǎn)換

這篇具有很好參考價(jià)值的文章主要介紹了Java 字節(jié)數(shù)組(byte[])和整型(int)的相互轉(zhuǎn)換。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


前言

??????恰巧碰到了字節(jié)數(shù)組和整型的轉(zhuǎn)換問(wèn)題,特在此總結(jié)一下。將 int 按照小端法映射到 byte[] 中。即最低 8 位放在 byte[0] 中,依次類推。


一、int 轉(zhuǎn)換為 byte[]

??????這個(gè)實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單,先保存最低的 8 位到 byte 數(shù)組中,然后不斷的右移 8 位,每次保存低 8 位數(shù)據(jù)即可,參考代碼:(這里包含一個(gè) int 到 byte 的轉(zhuǎn)換,轉(zhuǎn)換規(guī)則是截取 int 的最低 8 位作為 byte 值)

    public static byte[] intToBytes(int a){
        byte[] ans=new byte[4];
        for(int i=0;i<4;i++)
            ans[i]=(byte)(a>>(i*8));//截?cái)?int 的低 8 位為一個(gè)字節(jié) byte,并存儲(chǔ)起來(lái)
        return ans;
    }

二、測(cè)試代碼

??????為了驗(yàn)證轉(zhuǎn)換結(jié)果,簡(jiǎn)單寫了兩個(gè)方法用來(lái)按位打印 int 和 byte,可參考如下:

    public static void intPrint(int a){//將 int 按位從左到右打印
        int count=0;
        for(int i=31;i>=0;i--){
            System.out.print((a>>i)&1);
            count++;
            if(count==4){//每四位為一組,用空格分開
                System.out.print(" ");
                count=0;
            }
        }
        System.out.println();
    }
    public static void bytePrint(byte a){//將 byte 按位從左到右打印
        int count=0;
        for(int i=7;i>=0;i--){
            System.out.print((a>>i)&1);
            count++;
            if(count==4){//每四位為一組,用空格分開
                System.out.print(" ");
                count=0;
            }
        }
        System.out.println();
    }

三、測(cè)試

??????測(cè)試一下 int 到 byte[] 的正確性:用一個(gè)整數(shù)來(lái)測(cè)試一下,如下:

    public static void main(String[] args) {
        int c=968523,d=-65423;
        byte[] ans=intToBytes(d);
        intPrint(d);
        for(int i=0;i<4;i++)
            bytePrint(ans[i]);
            
    }

??????輸出結(jié)果為:
??????1111 1111 1111 1111 0000 0000 0111 0001
??????0111 0001
??????0000 0000
??????1111 1111
??????1111 1111

??????算法執(zhí)行無(wú)誤。

四、byte[] 轉(zhuǎn)換為 int

??????這個(gè)實(shí)現(xiàn)起來(lái)也比較簡(jiǎn)單, 每次將 byte 值保存到 int 的最低 8 位,然后 int 左移 8 位,繼續(xù)保存新的 byte 值即可,參考代碼:

    public static int bytesToInt(byte[] a){
        int ans=0;
        for(int i=0;i<4;i++){
            ans<<=8;//左移 8 位
            ans|=a[3-i];//保存 byte 值到 ans 的最低 8 位上
            intPrint(ans);
        }
        return ans;
    }

??????驗(yàn)證一下(這一次采用整數(shù) c 來(lái)說(shuō)明問(wèn)題,整數(shù) d 恰好可以得到正確結(jié)果…):

    public static void main(String[] args) {
        int c=968523,d=-65423;
        byte[] ans=intToBytes(c);
        intPrint(c);
        for(int i=0;i<4;i++)
            bytePrint(ans[i]);

        int e=bytesToInt(ans);
    }

??????輸出結(jié)果:
??????0000 0000 0000 1110 1100 0111 0100 1011
??????0100 1011
??????1100 0111
??????0000 1110
??????0000 0000
??????0000 0000 0000 0000 0000 0000 0000 0000
??????0000 0000 0000 0000 0000 0000 0000 1110
??????1111 1111 1111 1111 1111 1111 1100 0111
??????1111 1111 1111 1111 1100 0111 0100 1011

??????Error:粗體顯示和我們預(yù)料中的不太一樣,其原因在于:語(yǔ)句 ans|=a[3-i];中,執(zhí)行流程為:先將 byte a[3-i] 提升到 int ,然后再和 ans 取或操作,最后將結(jié)果賦給 ans。
??????在提升的過(guò)程中包含一個(gè) byte 到 int 的轉(zhuǎn)換,轉(zhuǎn)換規(guī)則:如果 byte 值為負(fù),即最高位為 1,那么在前面補(bǔ)上 24 個(gè) 1 湊夠 32 位作為 int 的值,如果 byte 值為正,即最高位為 0,那么在前面補(bǔ)上 24個(gè) 0 得到新的 int 值。

??????為了每次在將 byte 轉(zhuǎn)換為 int 時(shí),前面都補(bǔ)上 0 ,這里可以將它先和 0xff 取 &。這里的 0xff 如果轉(zhuǎn)換為 int 四字節(jié)的話為:0000 0000 0000 0000 0000 0000 1111 1111 。當(dāng)然了,更加清晰的寫法見下面代碼。

??????修改之后的代碼如下:

    public static int bytesToInt(byte[] a){
        int ans=0;
        for(int i=0;i<4;i++){
            ans<<=8;
            ans|=(a[3-i]&0xff);
            /* 這種寫法會(huì)看起來(lái)更加清楚一些:
            int tmp=a[3-i];
            tmp=tmp&0x000000ff;
            ans|=tmp;*/
            intPrint(ans);
        }
        return ans;
    }
    
    public static void main(String[] args) {
        int c=968523,d=-65423;
        byte[] ans=intToBytes(c);
        intPrint(c);
        for(int i=0;i<4;i++)
            bytePrint(ans[i]);

        int e=bytesToInt(ans);
        return;
    }

??????輸出結(jié)果:
??????0000 0000 0000 1110 1100 0111 0100 1011
??????0100 1011
??????1100 0111
??????0000 1110
??????0000 0000
??????0000 0000 0000 0000 0000 0000 0000 0000
??????0000 0000 0000 0000 0000 0000 0000 1110
??????0000 0000 0000 0000 0000 1110 1100 0111
??????0000 0000 0000 1110 1100 0111 0100 1011

??????能夠看到可以得到正確結(jié)果。


總結(jié)

??????需要注意的是:在 8 位 byte 提升到 32 位 int 時(shí),由于數(shù)組在計(jì)算機(jī)中以補(bǔ)碼形式存在,所以要區(qū)分正負(fù)的。正數(shù)前面補(bǔ) 0 ,負(fù)數(shù)前面補(bǔ) 1。而為了消除其差異性,僅保留我們所感興趣的低 8 位,需要先將可能存在的 1 均變?yōu)?0,所以要先和 0xff 做 & 操作; 或者先提升到 int ,然后和0x000000ff 取 & 。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-411254.html

到了這里,關(guān)于Java 字節(jié)數(shù)組(byte[])和整型(int)的相互轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java:List相互轉(zhuǎn)換數(shù)組

    經(jīng)常我們會(huì)遇到前端傳服務(wù)端值為數(shù)組的時(shí)候我們需要對(duì)其轉(zhuǎn)換成集合便于一些其它操作,刪除,匹配等操作,今天我們就總結(jié)下數(shù)組集合相互轉(zhuǎn)換的方法 1、Object[] objArray = arrayList.toArray(); 2、String[] strArray = new String[list.size()]; 3、String[] strArray = list.toArray(new String[list.size()])

    2024年01月18日
    瀏覽(30)
  • Java中List與數(shù)組之間的相互轉(zhuǎn)換

    List列表中存儲(chǔ)對(duì)象,如 ListInteger 、 ListString 、 ListPerson ,對(duì)象數(shù)組中同樣存儲(chǔ)相應(yīng)的對(duì)象,如Integer[]、String[]、Person[],對(duì)象數(shù)組與對(duì)象List的轉(zhuǎn)換可通過(guò)如下方式實(shí)現(xiàn): (一)對(duì)象List轉(zhuǎn)對(duì)象數(shù)組 1、toArray()方法 直接調(diào)用對(duì)象List的toArray()方法轉(zhuǎn)換為對(duì)象數(shù)組,該方法的參數(shù)是

    2024年02月16日
    瀏覽(28)
  • 字符串string轉(zhuǎn)換長(zhǎng)整型int(八進(jìn)制、十進(jìn)制、十六進(jìn)制)

    strtoul() 是C語(yǔ)言標(biāo)準(zhǔn)庫(kù)中用于將字符串轉(zhuǎn)換成無(wú)符號(hào)長(zhǎng)整數(shù)的函數(shù)。它的完整原型如下: 其中, nptr 代表要被轉(zhuǎn)換成無(wú)符號(hào)長(zhǎng)整數(shù)的字符串; endptr 是一個(gè)指向字符指針的指針,該指針指向已經(jīng)轉(zhuǎn)換了的最后一個(gè)字符的下一個(gè)位置; base 指定要采用的進(jìn)制,范圍是2 ~ 36。 該函

    2024年02月07日
    瀏覽(31)
  • #java 逗號(hào)分隔String字符串 - 數(shù)組 - 集合,相互轉(zhuǎn)換

    1. 準(zhǔn)備一個(gè)逗號(hào)分割字符串 2. 逗號(hào)分割字符串轉(zhuǎn)換為集合(轉(zhuǎn)換為集合之前會(huì)先轉(zhuǎn)換為數(shù)組) 3. 集合轉(zhuǎn)換為逗號(hào)分隔的字符串 4. 數(shù)組轉(zhuǎn)逗號(hào)分隔字符串

    2024年02月04日
    瀏覽(37)
  • 實(shí)現(xiàn)對(duì)象轉(zhuǎn)成字節(jié)數(shù)組(整型支持按位寫入,字符串則按字節(jié)寫入)

    閑著無(wú)聊,寫了一個(gè)對(duì)象轉(zhuǎn)換成byte[]的工具類,支持整型按位寫入(大大節(jié)省空間),具體步驟如下: 1. 定義實(shí)體類和注解 2. 工具類 ? ? 3. 測(cè)試結(jié)果 ? ? 參考文章: https://www.cnblogs.com/Dotnet9-com/p/17981055

    2024年01月23日
    瀏覽(26)
  • python中str、bytes、十六進(jìn)制字符串的相互轉(zhuǎn)換

    python中str、bytes、十六進(jìn)制字符串的介紹 str是python的內(nèi)置函數(shù),str字符串在python中使用 \\\'\\\' 或者 \\\"\\\" 括起來(lái)的字符串,比如: bytes也是python的內(nèi)置函數(shù),bytes字符串通常以b開頭,比如: 十六進(jìn)制字符串是指字符串中每個(gè)字符表示一個(gè)十六進(jìn)制數(shù),兩個(gè)字符組成一個(gè)字節(jié),比如

    2024年02月21日
    瀏覽(33)
  • python中str與int類型的相互轉(zhuǎn)換

    1. str轉(zhuǎn)換成int 方法:使用int()函數(shù) 3. int轉(zhuǎn)換成str 方法:使用str()函數(shù)

    2024年02月13日
    瀏覽(25)
  • C語(yǔ)言中的char類型和int類型的相互轉(zhuǎn)換

    C語(yǔ)言是一種廣泛使用的編程語(yǔ)言,它具有高效、靈活、可移植等特點(diǎn)。C語(yǔ)言中有多種數(shù)據(jù)類型,用來(lái)表示不同的數(shù)據(jù)和信息。本文將介紹C語(yǔ)言中的兩種基本數(shù)據(jù)類型:char類型和int類型,以及它們之間的相互轉(zhuǎn)換的方法和原理。 char類型是一種字符類型,用來(lái)表示單個(gè)字符,

    2024年02月03日
    瀏覽(28)
  • C++中string類型和int類型之間的相互轉(zhuǎn)換【全網(wǎng)最全】

    字符串操作是各種算法題中的???,很多數(shù)據(jù)常常以字符串形式給出,其中有的需要自己轉(zhuǎn)化成整數(shù),而一些整型數(shù)據(jù)有時(shí)轉(zhuǎn)換成字符串處理起來(lái)更加方便,比如判斷一個(gè)整數(shù)是否是回文數(shù),所以字符串和整數(shù)的轉(zhuǎn)換是一些問(wèn)題處理的基礎(chǔ)步驟, C++ ?在處理這類問(wèn)題時(shí)并不像

    2024年02月04日
    瀏覽(32)
  • java將list轉(zhuǎn)為逗號(hào)隔開字符串,將逗號(hào)連接的字符串轉(zhuǎn)成字符數(shù)組,?將逗號(hào)分隔的字符串轉(zhuǎn)換為L(zhǎng)ist?(Java逗號(hào)分隔-字符串與數(shù)組相互轉(zhuǎn)換)

    java將list轉(zhuǎn)為逗號(hào)隔開字符串,將逗號(hào)連接的字符串轉(zhuǎn)成字符數(shù)組,?將逗號(hào)分隔的字符串轉(zhuǎn)換為L(zhǎng)ist?(Java逗號(hào)分隔-字符串與數(shù)組相互轉(zhuǎn)換)

    ? ?參考:java將list轉(zhuǎn)為逗號(hào)隔開字符串_51CTO博客_list轉(zhuǎn)字符串逗號(hào)隔開 Java將字符串轉(zhuǎn)化為數(shù)組_java 字符串轉(zhuǎn)數(shù)組-CSDN博客? Java逗號(hào)分隔-字符串與數(shù)組相互轉(zhuǎn)換-CSDN博客 ?

    2024年02月08日
    瀏覽(42)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包