首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将uintvar(VLQ)读入C# int

将uintvar(VLQ)读入C# int
EN

Stack Overflow用户
提问于 2009-08-05 03:43:50
回答 1查看 382关注 0票数 1

有人使用过.Net代码来读取/管理VLQ吗?有一个Java方法readMultiByteInteger可以接受字节流,并根据VLQ规范将它们转换为int,但是我找不到与之等效的C#。

来自维基百科:可变长量(VLQ)是一种通用代码,它使用任意数量的二进制八位字节(8位字节)来表示无限大的整数。

有谁有主意吗?(除了切换到Java?)

谢谢,保罗

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-05 05:49:30

嗨,我已经创建了一个扩展方法来转换int -> uintvar,没有内置的支持来这样做……

代码语言:javascript
复制
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上使用这段代码,我假设你知道这个过程……

如何使用

代码语言:javascript
复制
var uIntVars = 0x0FFFFFFF.ToUIntVar();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1231070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档