2009-08-05 6 views
1

Est-ce que quelqu'un a travaillé avec du code .Net pour lire/gérer des VLQ? Il existe une méthode Java readMultiByteInteger qui accepte un flux d'octets et les couvre à ints selon la spécification VLQ mais je ne trouve pas d'équivalent C#.Lecture d'uintvars (VLQ) en C#

De Wikipedia: Une quantité de longueur variable (VLQ) est un code universel qui utilise un nombre arbitraire d'octets binaires (octets de huit bits) pour représenter un entier infiniment grand.

Quelqu'un a une idée? (En plus de passer à Java?)

Merci, Paul

Répondre

1

Salut, j'ai créé la méthode d'extension pour convertir int -> uintvar, Theres aucun support intégré pour le faire ...

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

Je sais que le code semble laid, mais il fonctionne avec C# 3.0, si vous voulez utiliser ce code avec C# 2.0 Je suppose que vous connaissez la procédure ...

Comment utiliser

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

Merci Prashant. Malheureusement, je travaille toujours avec. Net 2.0, mais je peux mettre à jour votre code. par exemple. Je peux en faire une méthode utilitaire statique plutôt qu'une extension. Merci encore. –

+0

Oui, vous pouvez faire de la méthode statique et peut également nettoyer un code moche –