📄 streamhandle.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -