2017-07-25 18 views
3

私は、数値のリストをBase64でエンコードされた文字列に変換するために、以下のコードを使用しています。Convert.ToBase64String()数値が255より大きい

問題は、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); 
} 
+0

バイトしか0-255ことができます。新しいバイト[lst.Count] – jdweng

+0

'int'は32ビットではなく8です。 –

+0

そうですね、私はこれらのステートメントの両方を知っていました。私は良い回避策がわからないので尋ねられました。 BitConverterクラスが欠けていました。 –

答えて

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

+0

ああ、そのBitConverterクラスは私が逃したものです –

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

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

...使用例...

​​

...出力...

0,1,2,3,4,5,6,7,8,9 
AAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAA== 
0,1,2,3,4,5,6,7,8,9 
関連する問題