日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HEX编码、Base64编码

發(fā)布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HEX编码、Base64编码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 摘要
    • HEX編碼
    • Base64編碼
    • 總結(jié)

摘要

本文將講述HEX 和Base64,編碼的規(guī)則。

HEX編碼

hex編碼也稱之為Base16 編碼

就是把一個字節(jié),用十六進(jìn)制來表示, 表示的結(jié)果得是字符形式的。 說過程大家就會更加容易理解

比如說字符的 ‘a(chǎn)’,在計算機底層存儲的是 0110 0001 ,對應(yīng)的16進(jìn)制就是61 ,它對應(yīng)的字符 是'61'

也就是說 ‘a(chǎn)’ 經(jīng)過HEX編碼轉(zhuǎn)化成了 '61' ,從計算存儲二進(jìn)制的角度是 從0110 0001經(jīng)過HEX編碼成了 0011011000110001,占用的存儲擴大了一倍。

其他任意二進(jìn)制數(shù)據(jù)(字節(jié)為單位)都可以轉(zhuǎn)化。

代碼演示:

byte[] src = "a".getBytes(StandardCharsets.UTF_8); byte[] encoded = Hex.encode(src);System.out.printf("字符串'%s'編碼后的字符結(jié)果:'%s'%n",new String(src,StandardCharsets.UTF_8),new String(encoded,StandardCharsets.UTF_8)); System.out.printf("原長度:%d,編碼后的長度:%d, 編碼后是原來的%.2f%n",src.length,encoded.length,(double)(encoded.length)/src.length);

輸出結(jié)果為61

字符串'a'編碼后的字符結(jié)果:'61' 原長度:1,編碼后的長度:2, 編碼后是原來的2.00

Base64編碼

Base64的算法規(guī)則

  • 把數(shù)據(jù)按照字節(jié)分為三個字節(jié)一組,也就是24bit,如果最后存在不夠三個字節(jié)為一組,也就是不夠24bit的話,就使用0補位

    • 由于 編碼的時候以6bit為一個編碼的單位,所以缺一個字節(jié)的話就是24-8=16bit,也就是補2bit的0,那么就得補成18bit,構(gòu)成整數(shù)編碼單位。
    • 缺兩個字節(jié)的話就是24-16=8bit,那么就得補成12bit,也就是補4bit的0,構(gòu)成整數(shù)編碼單位。
  • 每一組按照 以6bit為單位按照下面表格進(jìn)行編碼。如果最后一組只有三個編碼單位的長度,那么就在編碼的結(jié)果最后加上=,。如果最后一組只有兩個編碼單位的長度,那么就在編碼的結(jié)果最后加上==

    ?

    IndexBinaryCharIndexBinaryCharIndexBinaryCharIndexBinaryChar
    0000000A16010000Q32100000g48110000w
    1000001B17010001R33100001h49110001x
    2000010C18010010S34100010i50110010y
    3000011D19010011T35100011j51110011z
    4000100E20010100U36100100k521101000
    5000101F21010101V37100101l531101011
    6000110G22010110W38100110m541101102
    7000111H23010111X39100111n551101113
    8001000I24011000Y40101000o561110004
    9001001J25011001Z41101001p571110015
    10001010K26011010a42101010q581110106
    11001011L27011011b43101011r591110117
    12001100M28011100c44101100s601111008
    13001101N29011101d45101101t611111019
    14001110O30011110e46101110u62111110+
    15001111P31011111f47101111v63111111/
    Padding=

舉例說明

  • 最后一組三個字節(jié),不用補位

? 'abc'字符串 底層的二進(jìn)制為 011000010110001001100011,這是24個bit為一組,以6bit分為四部分為 011000 010110 001001 100011 編碼成對應(yīng)上表的字符 ’ YWJj' 。

byte[] src = "abc".getBytes(StandardCharsets.UTF_8); byte[] encoded = Base64.encode(src);System.out.printf("字符串'%s'編碼后的字符結(jié)果:'%s'%n",new String(src,StandardCharsets.UTF_8),new String(encoded,StandardCharsets.UTF_8)); System.out.printf("原長度:%d,編碼后的長度:%d, 編碼后是原來的%.2f%n",src.length,encoded.length,(double)(encoded.length)/src.length); 字符串'abc'編碼后的字符結(jié)果:'YWJj' 原長度:3,編碼后的長度:4, 編碼后是原來的1.33
  • 最后一組只有兩個字節(jié),補2bit 0

    ? 'ab'字符串 底層的二進(jìn)制為 0110000101100010,補位成 011000010110001000,以6bit分為三部分為 011000 010110 001000 編碼成對應(yīng)上表的字符 ’ YWI' ,因為比一般的少一個編碼單位,所以在后面加上一個=字符,最終的結(jié)果就是 ’ YWI=' 。

byte[] src = "ab".getBytes(StandardCharsets.UTF_8); byte[] encoded = Base64.encode(src);System.out.printf("字符串'%s'編碼后的字符結(jié)果:'%s'%n",new String(src,StandardCharsets.UTF_8),new String(encoded,StandardCharsets.UTF_8)); System.out.printf("原長度:%d,編碼后的長度:%d, 編碼后是原來的%.2f%n",src.length,encoded.length,(double)(encoded.length)/src.length); 字符串'ab'編碼后的字符結(jié)果:'YWI=' 原長度:2,編碼后的長度:4, 編碼后是原來的2.00
  • 最后一組只有一個字節(jié) 補4bit0

    ? 'a'字符串 底層的二進(jìn)制為 01100001,補位成 011000010000這是24個bit為一組,以6bit分為四部分為 011000 010000 編碼成對應(yīng)上表的字符 ’ YQ' ,因為比一般的少兩個編碼單位,所以后面加上兩個=字符,最終的結(jié)果就是 ’ YQ==' 。

byte[] src = "a".getBytes(StandardCharsets.UTF_8); byte[] encoded = Base64.encode(src);System.out.printf("字符串'%s'編碼后的字符結(jié)果:'%s'%n",new String(src,StandardCharsets.UTF_8),new String(encoded,StandardCharsets.UTF_8)); System.out.printf("原長度:%d,編碼后的長度:%d, 編碼后是原來的%.2f%n",src.length,encoded.length,(double)(encoded.length)/src.length); 字符串'a'編碼后的字符結(jié)果:'YQ==' 原長度:1,編碼后的長度:4, 編碼后是原來的4.00

由于在編碼的過程中只有最后一組才有可能存在補位情況,所以我們可以認(rèn)為 使用base64編碼后數(shù)據(jù)的體積是原來的1.33倍

總結(jié)

? HEX編碼的特點是:解碼編碼速度快但是體積變大了一倍;Base64編碼的特點: 體積小,但是由于算法相對復(fù)雜所以解碼編碼速度比較慢。

? 由于兩種編碼規(guī)則可以是任何二進(jìn)制的數(shù)據(jù)編碼成字符集可以翻譯二進(jìn)制數(shù)據(jù),這樣的話我們就輕而易舉的把二進(jìn)制數(shù)據(jù)打印顯示出來。便于我們查看二進(jìn)制數(shù)據(jù)。有些網(wǎng)絡(luò)協(xié)議傳輸只支持文本流的二進(jìn)制數(shù)據(jù)傳輸,所以這時候就可以使用這兩種編碼。

總結(jié)

以上是生活随笔為你收集整理的HEX编码、Base64编码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品欧美综合亚洲 | 亚洲在线观看一区二区 | 亚洲乱码国产乱码精品精大量 | 聚色屋 | 亲子伦视频一区二区三区 | 日韩伦理视频 | 免费看的av网站 | 大尺度床戏揉捏胸视频 | 在线观看免费黄色 | 成人夜色视频 | 欧美一区二区三区免费观看 | 亚洲一区二区免费在线观看 | 精品色图| 成人免费黄色小视频 | xxx久久 | 国产精品久久久久久中文字 | mm131美女大尺度私密照尤果 | 国产精品又黄又爽又色无遮挡 | 成人免费毛片视频 | 日批免费在线观看 | 91精品在线免费观看 | 欧美福利在线观看 | 亚洲精品乱码久久久久久蜜桃欧美 | 久久人人爽爽 | 极品尤物一区二区三区 | 亚洲一区二区在线 | 欧美性色19p| 91亚洲精品久久久久久久久久久久 | 久久极品视频 | 嫩草影院懂你的影院 | 星铁乱淫h侵犯h文 | 日韩在线电影一区二区 | 91麻豆成人精品国产免费网站 | jizz自拍 | 麻豆日韩| 欧美熟妇精品久久久久久 | 国产一级视频免费观看 | 精品久久久视频 | 理论片一区 | 欧美激情在线观看一区 | 星空大象在线观看免费播放 | 日韩视频在线免费观看 | 欧美另类videossexo高潮 | 久久中文字幕国产 | 午夜视频在线看 | 亚洲五级片 | 久久久久亚洲精品 | 四虎网站最新网址 | 色欲一区二区三区精品a片 在线观看黄网站 | 美脚の诱脚舐め脚 | videos另类灌满极品另类 | www网站在线免费观看 | 久草热视频| 91丨九色丨丰满人妖 | 国产精品毛片久久久久久 | 樱花影院最新免费观看攻略 | 亚洲女优在线观看 | 天堂av√| 天天摸夜夜操 | 韩日午夜在线资源一区二区 | 久草视频精品 | 欧美 日韩 国产 成人 | 久久久夜色精品亚洲 | 黑帮大佬和我的三百六十五天 | 撸啊撸在线视频 | www.白浆| 国产亚洲精品久久久久久无几年桃 | 日本不卡视频在线观看 | 无码人妻一区二区三区一 | 成色视频 | 超碰77| 亚洲一区二区三区高清视频 | 亚洲品质自拍视频网站 | 久国久产久精永久网页 | 超碰在线中文 | 国产高清一二三区 | 东北老女人av | 欧美mv日韩mv国产网站 | 黄毛片在线观看 | 亚洲高清免费视频 | 成年人观看视频 | 尤物天堂| 国产啪视频 | 九热精品视频 | 国内精品视频在线播放 | 久热国产视频 | 美女隐私黄www网站动漫 | 亚洲色精品三区二区一区 | 免费网站观看www在线观 | 亚洲免费专区 | 国产伦精品一区二区三区千人斩 | 在线观看网页视频 | 任我爽在线| 男女啪啪十八 | 国产精品呻吟久久 | 最黄一级片 | www.中文字幕av | 日本电影一区二区三区 | 国产精品一区二三区 |