数字大于 255 的 Convert.ToBase64String()
Convert.ToBase64String() with numbers larger than 255
我正在使用下面的代码将数字列表转换为 Base64 编码字符串。
问题是,一旦我尝试超过 255,我就会得到 System.OverflowException
,因为它溢出了字节容量。
这样做的好方法是什么?有一个示例 here,但我只是想知道是否还有其他方法可以实现此功能。
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);
}
试试这个代码:
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
试试这个:
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());
}
每个 int
是 4 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
我正在使用下面的代码将数字列表转换为 Base64 编码字符串。
问题是,一旦我尝试超过 255,我就会得到 System.OverflowException
,因为它溢出了字节容量。
这样做的好方法是什么?有一个示例 here,但我只是想知道是否还有其他方法可以实现此功能。
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);
}
试试这个代码:
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
试试这个:
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());
}
每个 int
是 4 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