2009-08-05 43 views
1

有沒有人與.net代碼工作來讀取/管理VLQs?有一個Java方法readMultiByteInteger,它接受一個字節流,並根據VLQ規範將它們轉換爲整數,但是我找不到C#等價物。閱讀uintvars(VLQs)到C#整數

維基百科:一個可變長度的量(VLQ)是使用二進制八位組(8位字節)的任意數量的以表示無限大的整數的通用代碼。

任何人有想法? (除了切換到Java?)

感謝, 保羅

回答

1

您好我已創建的擴展方法來轉換INT - > uintvar,世界上沒有內置支持這樣做...

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#3.0的作品,如果你想使用與C#2.0的代碼我假設你知道程序...

如何使用

var uIntVars = 0x0FFFFFFF.ToUIntVar(); 
+0

謝謝Prashant。不幸的是,我仍然與.Net 2.0合作,但我可以改進你的代碼。例如我可以使它成爲一種靜態的實用方法而不是擴展。再次感謝。 – 2009-08-05 12:07:21