数字大于255的Convert.ToBase64String()

时间:2017-07-25 15:00:18

标签: c# base64

我使用下面的代码将数字列表转换为Base64编码的字符串。

问题是,一旦我尝试了超过255的东西,我就会得到echo sUrl = "http://ipinfo.io/%ip%/json" > %temp%\%webclient%.vbs ,因为它会溢出字节容量。

这样做的好方法是什么?有一个例子here,但我只是想知道是否有其他方法可以使这项工作。

System.OverflowException

3 个答案:

答案 0 :(得分:3)

试试这段代码:

public static string DecimalToBase64(List<int> lst)
{
    var bytes = new List<byte>();
    foreach (var item in lst)
        bytes.AddRange(BitConverter.GetBytes(item));
    return Convert.ToBase64String(bytes.ToArray());
}

详细了解字节顺序wiki

答案 1 :(得分:2)

每个int长度为byte。您需要在循环中考虑到这一点。

private static string IntsToBase64(IEnumerable<int> lst)
{
    var arr = lst.SelectMany(i => BitConverter.GetBytes(i))
                    .ToArray();
    return Convert.ToBase64String(arr);
}

private static IEnumerable<int> Base64ToInts(string base64)
{
    var buffer = Convert.FromBase64String(base64);
    for (var i = 0; i < buffer.Length; i += 4)
        yield return BitConverter.ToInt32(buffer, i);
}

..示例用法......

static void Main()
{
    var lst = Enumerable.Range(0, 10).ToArray();
    Console.WriteLine(string.Join(",", lst));

    var base64 = IntsToBase64(lst);
    Console.WriteLine(base64);

    var ret = Base64ToInts(base64);
    Console.WriteLine(string.Join(",", ret));
}

...输出......

0,1,2,3,4,5,6,7,8,9
AAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAA==
0,1,2,3,4,5,6,7,8,9

答案 2 :(得分:1)

试试这个:

        private string DecimalToBase64(List<int> lst)
        {
            List<byte> arr = new List<byte>();

            foreach(int number in lst )
            {
                arr.AddRange(BitConverter.GetBytes(number));
            }

            return Convert.ToBase64String(arr.ToArray());
        }