windows下用qt获取本地IP地址,显示的格式好像是16进制的,如何转换成10进制

windows下用qt获取本地IP地址,显示的格式好像是16进制的,如何转换成10进制,第1张

这个是IPv6的地址,本来IPV6的地址的表示格式就是分号分隔的16进制字符串,说起来是没必要变成点分十进制的,也没有程序认。

你用protocol()方法检查是否等于QAbstractSocket::IPv4Protocol

QList<QNetworkInterface>InterfaceIpList=QNetworkInterface::allInterfaces();

for(inti=0;i<InterfaceIpListlength();i++)

{

if(InterfaceIpList[i]isValid())

{

foreach(QNetworkAddressEntry addressE , InterfaceIpList[i]addressEntries() )

{

if(addressEip()protocol()==QAbstractSocket::IPv4Protocol

&&addressEbroadcast()!=QHostAddress::Null)

{

NetInterfaceList<<addressEip()toString();

}

}

}

}

注意以上不包括回环地址127001和通配地址:0000

还有一个简单的方法:

QList<QHostAddress> InterfaceIpList=QNetworkInterface::allAddresses () ;

for(int i=0;i<InterfaceIpListlength();i++)

{

if(InterfaceIpList[i]protocol()==QAbstractSocket::IPv4Protocol)

{

NetInterfaceList<<InterfaceIpList[i]toString();

}

}

这个会包含非有效IP:即未连接的网卡缓存的IP地址,这个可能和系统有关。

你如果用hostinfo也得检查是否有效和过滤IP类型。

#include

#include

#include

#include

#define MaxQSize 80

float qlist[MaxQSize],qlist1[MaxQSize],qlist2[MaxQSize]; //定义三个全局队列

int front=0,rear=0,front1=0,front2=0,rear1=0,rear2=0,count=0,count1=0,count2=0;//定义三个队列头结点、尾结点、数据个数

main()

{

char c[80];

void Enter(float),pop(),ClearStack();

printf("input string:(n:sin,o:cos,s:sqrt)\n");

while(gets(c),c!='q' ||c!='Q')

{

switch(c)

{

case '+':

case '':

case 's':

case 'n': //求SIN

case 'o': //求COS

case '/': //将符号入第一个队列

{

if(count==MaxQSize)

{

printf("Quere overflow!");

exit(1);

}

count++;

qlist[rear]=c;

rear=(rear+1)%MaxQSize;

break;}

case '-':

{

if(strlen(c)>1) //如果是负号,则将负号和数一起入第二个队列

Enter(atof(c));

else //否则,说明是减号,入第一队列

if(count==MaxQSize)

{

printf("Quere overflow!");

exit(1);

}

count++;

qlist[rear]=c;

rear=(rear+1)%MaxQSize;

break;}

case '=':

pop(); //显示结果

break;

case 'c':

ClearStack();

break;

case 'q':

ClearStack();

exit(1);

default:

Enter(atof(c));

break;

}

}

return 0;

}

void Enter(float num) //将数据入第二个队列

{

if(count1==MaxQSize)

{

printf("Queue overflow!\n");

exit(1);

}

count1++;

qlist1[rear1]=num;

rear1=(rear1+1)%MaxQSize;

}

void ClearStack() //将三个队列清空

{

count=0;

count1=0;

count2=0;

front=0;

rear=0;

front1=0;

rear1=0;

front2=0;

rear2=0;

}

void pop() //显示结果

{

float QFront(float num1,float num2,char temp);

float num1,num2;

float sum;

char temp;

temp=qlist[front]; //将第一个队列中的头结点读出来

while(count1!=0) //判断第二个队列是否有数

{

temp=qlist[front]; //将队列中头结点读出来

sum=QFront(num1,num2,&temp);

count--;

front=(front+1)%MaxQSize;//将第一个队列头指针加1

}

if(count!=0 && temp=='s')

sum=sqrt(qlist2[front2]);

if(count!=0 && temp=='n')

sum=sin(qlist2[front2]);

if(count!=0 && temp=='o')

sum=cos(qlist2[front2]);

printf("%f",sum);

}

float QFront(float num1,float num2,char temp)

{

float number,numb1;

float QFront1();

void QInsert(float);

num1=QFront1(); //先读出一个数

switch(temp)

{

case '+':

if(count2==0)

{

num2=QFront1();//读出第二个数

number=num1+num2;

QInsert(number);//将结果存入第三个队列

}

else

{

number=num1+qlist2[front2];

front2=(front2+1)%MaxQSize;

QInsert(number);

}

break;

case '-':

if(count2==0)

{

num2=QFront1();

number=num1-num2;

printf("number=%f\n",number);

QInsert(number);

}

else

{

number=qlist2[front2]-num1;

printf("number=%f\n",number);

front2=(front2+1)%MaxQSize;

QInsert(number);

}

break;

case '':

if(count2==0) //如果第三个队列中没有数据,则从第二个队列中读出一个数据

{

num2=QFront1();

number=num1num2;

QInsert(number);

}

else //否则,从第三个队列中读出数据

{

number=qlist2[front2]num1;

front2=(front2+1)%MaxQSize;

QInsert(number);

}

break;

case '/':

if(count2==0)

{

num2=QFront1();

if(num2==0)

{

printf("divied by 0");

ClearStack();

exit(1);

}

else

{

number=num1/num2;

QInsert(number);

}

}

else

{

if(num1==0)

{

printf("divide by 0");

ClearStack();

exit(1);

}

else

{

number=qlist2[front2]/num1;

front2=(front2+1)%MaxQSize;

QInsert(number);

}

}

break;

case 's':

if(count2==0)

{

number=sqrt(num1);

QInsert(number);

}

else

{

number=sqrt(qlist2[front2]);

printf("number=%d\n",number);

front2=(front2+1)%MaxQSize;

QInsert(number);

}

break;

case 'n':

if(count2==0)

{

number=sin(num1);

QInsert(number);

}

else

{

number=sin(qlist2[front2]);

front2=(front2+1)%MaxQSize;

QInsert(number);

}

break;

case 'o':

if(count2==0)

{

number=cos(num1);

printf("number=%d\n",number);

QInsert(number);

}

else

{

number=cos(qlist2[front2]);

printf("number=%d\n",number);

front2=(front2+1)%MaxQSize;

QInsert(number);

}

break;

}

return number;

}

float QFront1() //从第一个数据读数据

{

float temp;

if(count1==0)

{

printf("Deleting from an empty queue!\n");

exit(1);

}

temp=qlist1[front1];

count1--;

front1=(front1+1)%MaxQSize;

return temp;

}

void QInsert(float number) //将结果存入第三个队列

{

if(count2==MaxQSize)

{

printf("Queue overflow!\n");

exit(1);

}

count2++;

qlist2[rear2]=number;

rear2=(rear2+1)%MaxQSize;

}

其实这个程序用链表实现更好,但是由于时间关系,所以用了数组。当然,这个程序还不是很完善,还有很多地方需要改进,比如可以用图形界面来进行 *** 作、可以将三个队列放入一个结构体中等。

不是计算是获取吧都显示出来了怎么还在计算呢

View view = listviewgetFirstVisiblePosition();

viewgetLayoutParams()getheight();

不过按照你的需求,应该是在listViewsetOnScrollListener();

listViewsetOnScrollListener(new OnScrollListener() {

@Override

public void onScrollStateChanged(AbsListView view, int scrollState) {

}

@Override

public void onScroll(AbsListView view, int firstVisibleItem,

int visibleItemCount, int totalItemCount) {

View view = listViewgetChildAt(firstVisibleItem);

if(view是视频){

//播放

}

}

});

不过这样应该会很卡,性能上不太好,你可以先试试

以上就是关于windows下用qt获取本地IP地址,显示的格式好像是16进制的,如何转换成10进制全部的内容,包括:windows下用qt获取本地IP地址,显示的格式好像是16进制的,如何转换成10进制、用C语言设计一个简单的计算器、求助,如何给QListView的条目设置间距等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9448432.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存