Convert.ToBase64String () with numbers greater than 255

I am using below code to convert a list of numbers to Base64 encoding.

The problem is that as soon as I try something over 255 I get System.OverflowException

as it overflows the byte capacity.

What would be a good way to do this? An example is given here but I'm just wondering if there are other ways to make this work.

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

    for(int i = 0; i < arr.Length; i++)
    {
        arr[i] = Convert.ToByte(lst[i]);
    }

    return Convert.ToBase64String(arr);
}

      

+3


source to share


3 answers


Try this code:

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());
}

      



More on endian wiki

+3


source


Each int

is 4 in length byte

. You should consider this in your loop.

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);
}

      

.. example of use ...



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));
}

      

... output...

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

      

+2


source


Try the following:

        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());
        }

      

+1


source







All Articles