91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Base64編碼中為什么會有等號

發布時間:2023-03-06 11:36:56 來源:億速云 閱讀:126 作者:iii 欄目:開發技術

這篇文章主要介紹了Base64編碼中為什么會有等號的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Base64編碼中為什么會有等號文章都會有所收獲,下面我們一起來看看吧。

Base64編碼中為什么會有等號(=)

如果對字符串"ab"進行Base64編碼,得到的結果將是:YWI=,結果中為什么會出現=呢,這就需要了解一下base64編碼背后的原理。

Base64是一種便于網絡傳輸的字節碼編碼方式,之所以叫Base64是由于它的編碼結果是由64個可打印字符組成,這些字符在不同系統間是通用的。

64個字符如下表所示

索引

對應字符

索引

對應字符

索引

對應字符

索引

對應字符

0

A

17

R

34

i

51

z

1

B

18

S

35

j

52

0

2

C

19

T

36

k

53

1

3

D

20

U

37

l

54

2

4

E

21

V

38

m

55

3

5

F

22

W

39

n

56

4

6

G

23

X

40

o

57

5

7

H

24

Y

41

p

58

6

8

I

25

Z

42

q

59

7

9

J

26

a

43

r

60

8

10

K

27

b

44

s

61

9

11

L

28

c

45

t

62

+

12

M

29

d

46

u

63

/

13

N

30

e

47

v



14

O

31

f

48

w



15

P

32

g

49

x



16

Q

33

h

50

y



大家可以看到這里面并沒 '=' 這個字符,這是因為 ’=‘ 其實是填充字符。

如果需要表示上面的64個字符,那么需要6bit,也就是2^6=64,base64的核心思想就是,將3個

字節拆分成4個6bit,然后對每個6bit的高位補2個0,構成1個字節。也即是每3個字節最終結果將變成4個字節。

如果原始字符串的字節數不是3的整數倍,那么就用0來填充,用來填充的0就被編碼成了'=',這就是出現=的原因,并且只會出現在結果出,如果原始字符剛好是3字節的整數倍,那么就沒有等號了。

回到開頭的例子,我們看下ab是如何計算得到YWI=的。

  • 1、ab對應的ascaii編碼的二進制表示為:011000001 01100010

  • 2、由于只有兩個字節,需要填充到3個字段,也就是:011000001 01100010 00000000

  • 3、拆分成四個6bit:011000 010110 001000 000000

  • 4、高位補兩個0,變成四字節:00011000 00010110 00001000 00000000

  • 5、按照上表的對應關系:24-Y 22-W 8-I 填充-=, 也即是YWI=。

需要注意填充的0是要被轉化成=,而不是上表中的A。

順便附上golang示例代碼

func main() {
    str := "ab"
    // base64編碼
    encodedStr := base64.URLEncoding.EncodeToString([]byte(str))
    fmt.Println(encodedStr) // YWI=
    // base64解碼
    decodeStr, _ := base64.URLEncoding.DecodeString(encodedStr)
    fmt.Println(string(decodeStr)) // ab
}

如果不希望保留填充的=,可以在編碼后去掉,解碼前填充上

示例代碼如下:

func main(){
    str := "ab"
	// base64編碼
	encodedStr := base64.URLEncoding.EncodeToString([]byte(str))
	encodedStr = strings.TrimRight(encodedStr, "=") // 去掉填充的=
	fmt.Println(encodedStr) // YWI
	// 解碼時,長度不是4的倍數,需要用=填充
	i := len(encodedStr) % 4
	if i != 0 {
		encodedStr += strings.Repeat("=", 4-i) 
	}
	// base64解碼
	decodeStr, _ := base64.URLEncoding.DecodeString(encodedStr)
	fmt.Println(string(decodeStr)) // ab
}

關于“Base64編碼中為什么會有等號”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Base64編碼中為什么會有等號”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

连平县| 耒阳市| 宾阳县| 织金县| 六枝特区| 灌阳县| 阜宁县| 崇明县| 福贡县| 禹州市| 班玛县| 莆田市| 扶风县| 肇州县| 潮州市| 潼南县| 江津市| 嘉黎县| 当雄县| 巴楚县| 柯坪县| 宜兰市| 岑巩县| 崇州市| 衢州市| 黄大仙区| 武山县| 贵港市| 霍山县| 临汾市| 潞西市| 烟台市| 乌鲁木齐市| 时尚| 晴隆县| 通河县| 纳雍县| 清河县| 随州市| 达孜县| 武山县|