long long ReadInt()
{
char data_first;
*this >> data_first;
long long nValue = (data_first & 127 ) >> 1 ; // 01111111 第一个字节只取6bit
if ((data_first & 128) == 128 ) // 10000000 判断最高位是否是1
{
int lMove = 6 ;
while (0 < getLength()) {
char data_next;
*this >> data_next;
long long test = data_next & 127;
if(lMove == 27)
{
test = test * int_27;
}
else
{
test = test << lMove;
}
nValue = test | nValue ; //后面只去头
lMove += 7 ;
if ((data_next & 128) != 128 ) {
break;
}
}
}
//第一个字节的最后一位是1表示-1
if((data_first & 1) == 1)
{
nValue = (-1 - nValue);
}
return nValue;
}
void WriteInt(long long nValue)
{
unsigned char buf[16];
unsigned char n = 0;
buf[n++] = (nValue & 63) << 1;
nValue >>= 6;
while (nValue > 0)
{
buf[n - 1] |= 128;
buf[n++] = nValue & 127;
nValue >>= 7;
}
for (int i=0; i<n; i++) {
Write(buf[i]);
}
}
不定长int的读写
最新推荐文章于 2024-08-23 21:39:27 发布