Focus on biztalk -- chnking

心无旁骛,专注于biztalk......

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  88 随笔 :: 0 文章 :: 650 评论 :: 66万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

一、  BASE64编码

byte[]中的元素当做无符号八位整数转换成只含有64个基本字符的字符串,这些基本字符是:

l         大写的A-Z

l         小写的a-z

l         数字0-9

l         '+' '/'

 

64个字符构成BASE64的字符集。‘=’,为填充字符,结尾处可以填充0-2个填充字符

 

Base64是将原文按照每 3 个字节一组分开,这个 3 字节组中的每一组将被按照位分解成 4 个部分,每个部分 6 个位,在这 4 个部分的每个部分高位加上 2 0构成一个新的 4 字节组,新的字节组中,每个字节只有 6 位,能表示64个值。

在原文在转换为BASE64编码时,试是以3个字节为一组转换成4字节一组的BASE64编码。如果原文不是三字节的倍数,可能多出一个字节和两个字节,分别会被转为2字节和3字节的BASE64编码,这时编码系统应该在形成的BASE64编码最后添加上填充符=,保证BASE64编码长度是4的倍数。所以在BASE64编码后添加的填充符=可能为0-2个。

BASE64编码对照表如下:

Value

Encoding

Value

Encoding

Value

Encoding

Value

Encoding

0

A

16

Q

32

g

48

w

1

B

17

R

33

h

49

x

2

C

18

S

34

i

50

y

3

D

19

T

35

j

51

z

4

E

20

U

36

k

52

0

5

F

21

V

37

l

53

1

6

G

22

W

38

m

54

2

7

H

23

X

39

n

55

3

8

I

24

Y

40

o

56

4

9

J

25

Z

41

p

57

5

10

K

26

a

42

q

58

6

11

L

27

b

43

r

59

7

12

M

28

c

44

s

60

8

13

N

29

d

45

t

61

9

14

O

30

e

46

u

62

+

15

P

31

f

47

v

63

/

 

Byte[]BASE64之间的转换纯粹就是表现形式的一种转换,它们之间有直接的对应关系,不涉及到使用何种代码页的问题,BASE64表达的也是字节流。
实际应用中,dotnet提供的两个主要的BASE64方法Convert.ToBase64String Convert.FromBase64String,并不是把Byte[]直接转成相应的BASE64的字节流,而是转换成unicode的等价字符串,就是base64的值对应的字符在unicode的等价字符。
如果要把
BASE64的等价字符串转成Byte[],还是需要指定一个代码页然后按照指定的编码转成Byte[]


二、  Byte[]BASE64之间的转换操作

static void Main(string[] args)

{

    string factString = "中华人民共和国";

    byte[] myByte;

    string Base64Str;

    //先把字符串按照utf-8的编码转换成byte[]

    Encoding myEncoding = Encoding.GetEncoding("utf-8");

    //myByte中获得这样的字节数组:228,184,173,229,141,142,228,186,186,230,176,145,229,133,177,229,146,140,229,155,189

    myByte = myEncoding.GetBytes(factString);

    //byte[]转成base64编码,这个例子形成的base64编码的unicode等价字符串:"5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9"

    Base64Str = Convert.ToBase64String(myByte);

    //再从base64编码转成byte[],又恢复为字节数组:228,184,173,229,141,142,228,186,186,230,176,145,229,133,177,229,146,140,229,155,189

    myByte = Convert.FromBase64String(Base64Str);

    //用同一个Encoding对象把byte[]转成字符串:"中华人民共和国"

    factString = myEncoding.GetString(myByte);

    Console.WriteLine(factString);

}

posted on   chnking  阅读(40017)  评论(2编辑  收藏  举报
编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
点击右上角即可分享
微信分享提示