本文主要是介绍不定长int的读写,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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的读写的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!