streamhandle.c

来自「一个264程序在NS2下面的仿真程序。非常好用」· C语言 代码 · 共 86 行

C
86
字号
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include "global.h"read_bits_result readbits(unsigned char *pt, int bitpos, int length){  int read,value=0,thisbit,bytepos=0;  unsigned char byte;  float potencia;  read_bits_result result;  byte = *pt;  for(read=0;read<length;read++){        potencia = pow(2.0,length-1-read);    thisbit = (( byte >> 7-bitpos ) & 1) * potencia;    value = value + thisbit;    bitpos++;    if (bitpos == 8){      bytepos++;      pt++;      bitpos = 0;      byte = *pt;    }     }  result.value = value;  result.bytesread = bytepos;  result.bitpos = bitpos;     return result;}read_bits_result uvlc(unsigned char *pt, int bitpos){   int leadingzerobits=0, thisbit, flag, bytepos = 0, length;  unsigned char byte;  read_bits_result rbres1,rbres2;  div_t half;  byte = *pt;  flag = 0;  while(flag == 0) {      thisbit = ( byte >> ( 7 - bitpos)) & 1;    bitpos++;    printf(" Byte: %x\tBytepos: %d\tBitpos: %d\tThisbit: %d\n", byte, bytepos,bitpos,thisbit);    if (thisbit == 0){      leadingzerobits++;      if ( bitpos > 7 ){        bitpos = 0;        bytepos++;         pt++;        byte = *pt;      }    } else {      flag = 1;      if (bitpos > 7){               bitpos = 0;        bytepos++;        pt++;      }      printf("Bytepos: %d\tBitpos: %d\tLeading zero bits: %d\n",bytepos,\	bitpos,leadingzerobits);      rbres1 = readbits(pt,bitpos,leadingzerobits);      printf("Read bits value: %d\tNew byte pos: %d\t New bit pos: %d\n",\	rbres1.value,rbres1.bytesread,rbres1.bitpos);      length = 1 + 2 * leadingzerobits;      half = div(length,2);      rbres2.value = pow(2.0,half.quot) - 1 + rbres1.value;      rbres2.bytesread = bytepos + rbres1.bytesread;      rbres2.bitpos = rbres1.bitpos;      printf("UVLC code: %d\tNew bytes read: %d\tNew bit pos: %d\n",\	rbres2.value,rbres2.bytesread,rbres2.bitpos);       }  }  return rbres2;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?