yaodong

yaodong
随笔 - 20, 评论 - 367, 引用 - 53

导航

标签

每月存档

最新留言

广告

一种节省整型数存储空间的方法

最近在看手机用的MMS文件(手机彩信的格式)的数据结构
觉得这种节省整型数存储空间的方法很好
一个整型数据一般要4个字节,但是有时候存储空间很紧张,但是数字的取值范围却很大
比如一个数的取值范围从0 - 2^64 都有可能,但是有不能用8个字节来存放,太浪费。

手机上是这样解决的
用一系列连续的字节来表示整数,字节的最高位作为标志位,高位为1表示后面还有一个字节
高位为0表示这是最后一个字节,其余的7位表示整数的值,字节序是高位在前低位在后,和x86的字节序相反
WAP文档里称这种整数为UintVar

这样的话:
<=0x7F          1 Byte
<=0x3FFF      2 Bytes
<=0x1FFFFF 3 Bytes
....

理论上讲这样可以存储无限大的整数
下面的代码可以把一个int型整数变成UIntVar的字节
返回值是转换后字节的个数,如果lpBytes参数给NULL,则返回需要的字节数

 int encodeUintvar(int nData, BYTE * lpBytes)
 {
  BYTE buf[8] = {0, 0, 0, 0, 0, 0, 0, 0};

  int n = 0;
  while(nData >= 128)
  {
   BYTE b = static_cast(nData & 0x7F);
   nData = nData >> 7;
   buf[n++] = b;
  }
        buf[n++] = static_cast(nData);

  if(lpBytes == NULL)
  {
   return n;
  }

  for(int i = 0; i < n; ++i)
  {
            lpBytes[i] = buf[n - i - 1] | 0x80;
  }
  lpBytes[n - 1] &= 0x7F;

  return n;
 }

posted on 2004-08-27 14:19:00 by yaodong  评论(10) 阅读(4114)

.NET获取其它程序的标准输出(stdout)

创建进程的时候,把ProcessStartInfo 的RedirectStandardOutput 设为true

UseShellExecute 设为false

如果让创建的进程不可见,把CreateNoWindow 设为true

   ProcessStartInfo psi = new ProcessStartInfo();
   psi.FileName = “<<exe file name>>“;
   psi.UseShellExecute = false;
   psi.CreateNoWindow = true;
   psi.RedirectStandardOutput = true;

   Process p = Process.Start(psi);
   while(p.WaitForExit(0) == false)
   {
    String s = p.StandardOutput.ReadLine();
   }

这样你就可以获得你所创建的进程调用Console.Write的输出

posted on 2004-08-12 13:25:00 by yaodong  评论(7) 阅读(3597)

Powered by: Joycode.MVC引擎 0.5.2.0