2009-08-05 7 views
1

VLQを読み書きするための.NETコードを扱っている人はいますか? JavaメソッドのreadMultiByteIntegerがあり、バイトのストリームを受け取り、VLQ仕様に従ってそれらをintに変換しますが、C#を見つけることができません。uintvars(VLQ)をC#intsに読み込む

出典:フリー百科事典ウィキペディア(Wikipedia):可変長量(VLQ)は無限大整数を表すために任意の数のバイナリオクテット(8ビットバイト)を使用する汎用コードです。

誰でも知っていますか? (Javaへの切り替え以外にも?)

おかげで、 ポール

答えて

1

こんにちは、私はint型に変換するために拡張メソッドを作成している - > uintvarは、これを行うには作り付けのサポートをtheresの...

public static class BinaryExtension 
{ 
    public static IEnumerable<int> ToUIntVar(this int value) 
    { 
    string binary = Convert.ToString(value, 2);  
    for (int i = binary.Length; i > 0; i -= 7) 
    { 
     if (i >= 7) 
     { 
      if (i == binary.Length) 
       yield return Convert.ToInt32(binary.Substring(i - 7, 7).PadLeft(8, '0'), 2); 
      else 
       yield return Convert.ToInt32("1" + binary.Substring(i - 7, 7), 2); 
     } 
     else if (binary.Length < 7) 
      yield return Convert.ToInt32(binary.Substring(0, i).PadLeft(8, '0'), 2); 
     else 
      yield return Convert.ToInt32("1" + binary.Substring(0, i).PadLeft(7, '0'), 2); 
     } 
    } 
} 

を使用する方法

...あなたがC#2.0でこのコードを使用したい場合、私はあなたが手順を知っていると仮定し、私はコードが醜い知っているが、それはC#3.0で動作します

+0

ありがとうPrashant。 Unfortunatelly私はまだ.Net 2.0で作業していますが、私はあなたのコードを改造することができます。例えば私はそれを拡張ではなく静的ユーティリティメソッドにすることができます。再度、感謝します。 –

+0

ええ、あなたはそれを静的な方法にすることができますまた、いくつかの醜いコードをきれいにすることができます –

関連する問題