分类目录归档:IT领域

利用win7自带虚拟无线网卡端口共享网络

首先,本文讨论的是基于Windows 7系统自带的功能,Vista和XP里面没有的,这个是Windows 7才加入的特性。

第一部分、配置虚拟无线网卡

第一步,以管理员权限打开命令行提示符,按下快捷键win(alt旁边的windows徽标键)+r,你也可以在开始菜单找到“运行”,打开运行对话框,输入cmd后确定运行。

第二步,输入下面的语句,配置你的无线路由

netsh wlan set hostednetwork mode=allow ssid=”Hosley ‘s private AP” key=88888888
这里解释一下,ssid=你的无线网络名字;key=无线网络的密码,貌似要8 位以上;上面的例子我这个命令就创建了一个名字为Hosley ‘s private AP,密码8个8的虚拟无线路由。这时候你可以在系统控制面板 – 网络连接里面看到一个新的无线网络连接生成了,例如我的是下图,名字可能不一样,但是你看到这个链接的网卡是Microsoft Virtual WiFi Miniport…。证明它是使用的虚拟的无线网卡。

第二部分、虚拟无线路由地开启与关闭

同样在命令行控制台下操作,开启这个承载网络的命令是

netsh wlan start hostednetwork

如果你要关闭,可以输入下面的命令

netsh wlan stop hostednetwork

当你开启之后这个承载网络之后,别人在附近搜索wifi就可以搜索到你之前创建的热点,例如我这一个Hosley ‘s private AP

同时你在网络连接那里看到原来未连接的那一个虚拟路由,现在已经连接上

先别着急连上这个热点,现在连上还不能实现共享网络,且看下一部分

第三部分、共享网络

打开控制面板 – 网络和共享中心 – 更改适配器设置,在这里面你需要找到你有联网的那个连接,不管是无线连接还是有线连接,右键点击选择菜单最后一项“属性”,在弹出的对话框中选择“共享”选项卡,选中第一项“允许其他网络用户通过此计算机的 Internet 连接来连接”,然后按下确定关闭对话框即可

什么?弹出来错误对话框?像下面这样?

这是因为你关闭了windows自带的防火墙服务,win + r 运行,输入services.msc打开“服务”配置窗口,在列表中找到Windows Firewall服务,右键点击启动即可,如果你已经禁用了这个服务,你还需要先右键属性将其启动类型选择为自动或者手动,然后再启用。

当成功开启共享之后,你会发现你原来联网的连接的信息上面多了一个已共享的字样,这就成功了。现在你用手机或者别的电脑都可以通过你这个电脑的虚拟的路由器上网了。

void指针 万能指针

void指针

指针有两个属性:指向变量/对象的地址和长度
但是指针只存储地址,长度则取决于指针的类型 
编译器根据指针的类型从指针指向的地址向后寻址 
指针类型不同则寻址范围也不同,比如: 
int*从指定地址向后寻找4字节作为变量的存储单元 
double*从指定地址向后寻找8字节作为变量的存储单元 
1.void指针是一种特别的指针 
   void *vp 
  //说它特别是因为它没有类型 
  //或者说这个类型不能判断出指向对象的长度 
2.任何指针都可以赋值给void指针 
  type *p; 
  vp=p; 
  //不需转换 
  //只获得变量/对象地址而不获得大小 
3.void指针赋值给其他类型的指针时都要进行转换 
   type *p=(type*)vp; 
   //转换类型也就是获得指向变量/对象大小 
4.void指针不能复引用 
  *vp//错误 
  因为void指针只知道,指向变量/对象的起始地址 
  而不知道指向变量/对象的大小(占几个字节)所以无法正确引用 
5.void指针不能参与指针运算,除非进行转换 
   (type*)vp++; 
  //vp==vp+sizeof(type)
#include<iostream>
#include<stdlib.h>
#include<string>
using namespace std;
typedef struct tag_st 

char id[10];
float fa[2];
}ST; 
//我在程序里面这样使用的 
int main()
{
ST * P=(ST *)malloc(sizeof(ST));
strcpy(P->id,"hello!");
P->fa[0]=1.1;
P->fa[1]=2.1;
ST * Q=(ST *)malloc(sizeof(ST));
strcpy(Q->id,"world!");
Q->fa[0]=3.1;
Q->fa[1]=4.1;
void ** plink=(void **)P;
*((ST *)(plink)) = * Q; //plink要先强制转换一下,目的是为了让它先知道要覆盖的大小.
                         //P的内容竟然给Q的内容覆盖掉了.
cout<<P->id<<" "<<P->fa[0]<<" "<<P->fa[1]<<endl;
return 0;
}

原帖地址:http://www.cppblog.com/dragon/archive/2008/09/02/60760.aspx

使用stringstream对象实现数据类型之间的转换

很多人都使用传统的C 库来进行数据类型之间的转换,这将会导致很多问题,因为这样的转换方法存在很多危险的陷阱。比如itoa()这个函数在标准库中是不存在的。标准的库提供了一种更好的转换选择,因为这一方法更加安全,自动,直接。

让我们来看一个具体的范例。假设你想把一个int转换为string。为了达到这一目的,你必须遵循如下的步骤:

1. 建立一个stringstream对象,

2.使用操作符<<插入int数据,

3.使用操作符>>抽取前面插入到的数据到一个string对象中。

以下代码行演示了这些步骤:

//程序名:teststream.cpp //功能:将int类型数据通过stringstream对象转成string 
#include <iostream> 
#include <stdlib.h>    // system()
#include <string>
#include <sstream>
using namespace std;
int main(int argc, char *argv[])
{
std::stringstream stream;
std::string result;
int num = 1000;

stream << num;                          //将int类型数据插入stream对象中
stream >> result;                       //取出之前插入的数据
cout << "num:/t" << num << endl;
cout << "result:/t" << result << endl;    //打印 "1000"

system("PAUSE");
return 0;
}

请注意我们没有使用一个简洁的cast操作或一个模式标志来实现stringstream转换。操作符<<和>>会自动地删除原始数据的类型和目标数据,并自动而安全地执行需要的转换。

库不会只限于一些高水平的操作,比如std::string。你可以很方便地实现一个char *变量之间的转换:

//程序名:teststream2.cpp //功能:将int类型数据通过stringstream对象转成char[] #include <iostream> 
#include <stdlib.h>    // system()
#include <string>
#include <sstream>
using namespace std;
int main(int argc, char *argv[])
{
std::stringstream stream;
char result[12] = {'/0'};
stream << 1234;                     //insert int to stream
stream >> result;                   //extract previously inserted value
cout << result << endl;             // print "1234"

system("PAUSE");
return 0;
}

如果你想通过使用同一stringstream对象实现多种类型的转换,请注意在每一次转换之后都必须调用clear()成员函数,例如:

//程序名:teststream3.cpp //功能:使用同一stringstream对象实现多种类型的转换 #include <iostream> 
#include <stdlib.h>    // system()
#include <string>
#include <sstream>
using namespace std;
int main(int argc, char *argv[])
{
std::stringstream stream;
int n, m;
stream<< "456";       //insert string
stream >> n;          //extract to int
stream.clear();       //reset stream before another conversion
stream<< true;        //insert bool value
stream >> m;          //extract to int

cout << "n:/t" << n << endl;    //print 456
cout << "m:/t" << m << endl;    //print 1

system("PAUSE");
return 0;
}

事实上,stream对象可以接收多种类型输入的特点给我们带来一个好处,可以将int,char*等不同类型的输入同时导入到一个stream对象,再通过该stream对象导出一个新值。

//程序名:teststream4.cpp //功能:将int类型数据和char*数据通过stringstream对象转成char[] 
#include <iostream> 
#include <stdlib.h>    // system()
#include <string>
#include <sstream>
using namespace std;
int main(int argc, char *argv[])
{
std::stringstream stream;
char ip[16];
stream << 218; //insert int
stream << "."; //insert string
stream << 192; //insert int
stream << "."; //insert string
stream << 160; //insert int
stream << "."; //insert string
stream << 228; //insert int

stream >> ip;

cout << "ip:/t" << ip << endl;    //print " 218.192.160.228"
system("PAUSE");
return 0;
}

 

原文链接:http://blog.csdn.net/kunp/archive/2004/06/30/30541.aspx