c#图片base64去转义字符_Base64编码,去掉等号特殊字符

本文提供了一个内部静态类Base64Helper,用于处理Base64编码和解码。它包括FromBase64String和ToBase64String方法,分别用于将Base64字符串转换为字节数组和将字节数组转换为Base64字符串。此外,还提供了Base64Encode和Base64Decode方法,用于直接进行字符串的编码和解码。该实现特别处理了包含等号和其他特殊字符的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/// 自定义包含指定字符的base64工具

internal static class Base64Helper

{

static readonly string base64Table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";

static readonly int[] base64Index = new int[]

{

-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,

-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,

-1,63,-1,-1,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,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,-1,

-1,-1,-1,62,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,

43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1,-1

};

public static byte[] FromBase64String(string inData)

{

int inDataLength = inData.Length;

int lengthmod4 = inDataLength % 4;

int calcLength = (inDataLength - lengthmod4);

byte[] outData = new byte[inDataLength / 4 * 3 + 3];

int j = 0;

int i;

int num1, num2, num3, num4;

for (i = 0; i < calcLength; i += 4, j += 3)

{

num1 = base64Index[inData[i]];

num2 = base64Index[inData[i + 1]];

num3 = base64Index[inData[i + 2]];

num4 = base64Index[inData[i + 3]];

outData[j] = (byte)((num1 << 2) | (num2 >> 4));

outData[j + 1] = (byte)(((num2 << 4) & 0xf0) | (num3 >> 2));

outData[j + 2] = (byte)(((num3 << 6) & 0xc0) | (num4 & 0x3f));

}

i = calcLength;

switch (lengthmod4)

{

case 3:

num1 = base64Index[inData[i]];

num2 = base64Index[inData[i + 1]];

num3 = base64Index[inData[i + 2]];

outData[j] = (byte)((num1 << 2) | (num2 >> 4));

outData[j + 1] = (byte)(((num2 << 4) & 0xf0) | (num3 >> 2));

j += 2;

break;

case 2:

num1 = base64Index[inData[i]];

num2 = base64Index[inData[i + 1]];

outData[j] = (byte)((num1 << 2) | (num2 >> 4));

j += 1;

break;

}

Array.Resize(ref outData, j);

return outData;

}

public static string ToBase64String(byte[] inData)

{

int inDataLength = inData.Length;

int outDataLength = (int)(inDataLength / 3 * 4) + 4;

char[] outData = new char[outDataLength];

int lengthmod3 = inDataLength % 3;

int calcLength = (inDataLength - lengthmod3);

int j = 0;

int i;

for (i = 0; i < calcLength; i += 3, j += 4)

{

outData[j] = base64Table[inData[i] >> 2];

outData[j + 1] = base64Table[((inData[i] & 0x03) << 4) | (inData[i + 1] >> 4)];

outData[j + 2] = base64Table[((inData[i + 1] & 0x0f) << 2) | (inData[i + 2] >> 6)];

outData[j + 3] = base64Table[(inData[i + 2] & 0x3f)];

}

i = calcLength;

switch (lengthmod3)

{

case 2:

outData[j] = base64Table[inData[i] >> 2];

outData[j + 1] = base64Table[((inData[i] & 0x03) << 4) | (inData[i + 1] >> 4)];

outData[j + 2] = base64Table[(inData[i + 1] & 0x0f) << 2];

j += 3;

break;

case 1:

outData[j] = base64Table[inData[i] >> 2];

outData[j + 1] = base64Table[(inData[i] & 0x03) << 4];

j += 2;

break;

}

return new string(outData, 0, j);

}

public static string Base64Encode(string source)

{

byte[] barray = Encoding.Default.GetBytes(source);

return Base64Helper.ToBase64String(barray);

}

public static string Base64Decode(string source)

{

byte[] barray = Base64Helper.FromBase64String(source);

return Encoding.Default.GetString(barray);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值