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
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 to share