PDA

View Full Version : ذخیره ی آی پی در یک متغیر



samin_panahi
جمعه 02 آبان 1393, 03:04 صبح
سلام
می خوام شماره آی پی (مثلا 192.168.1.1) رو داخل یه متغیر ذخیره کنم که بعدا ازش استفاده کنم
نوعی که می خوام آی پی رو توش ذخیره کنم DWORD هست اما آی پی چهار تا ممیز داره قبول نمی کنه
ممنون می شم راهنمایی کنید.

rahnema1
جمعه 02 آبان 1393, 08:10 صبح
سلام، با یونیون می شه انجام داد

#include <windows.h>
#include <stdio.h>

typedef union ip
{
BYTE ch[4];
DWORD DW;
} ip;
void myfunc(DWORD par)
{
printf("0x%08x\n", par);
ip a = {.DW = par};
printf("%d,%d,%d,%d", a.ch[0], a.ch[1], a.ch[2], a.ch[3]);
};
int main()
{
myfunc(((ip ) {192, 168, 1, 1}).DW);
}

negative60
جمعه 02 آبان 1393, 09:11 صبح
برای تبديل آيپی به عدد بزرگ از تابع inet_addr (http://msdn.microsoft.com/en-us/library/windows/desktop/ms738563(v=vs.85).aspx) و بر عکسش برای تبديل عدد بزرگ به آيپی از تابع inet_ntoa (http://msdn.microsoft.com/en-us/library/windows/desktop/ms738564(v=vs.85).aspx) استفاده ميشه
در ويندوز:
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>


#pragma comment(lib, "ws2_32.lib")


int main()
{
//IP address to unsigned long
DWORD dwIP = inet_addr("192.168.0.1"); //unsigned long


//Long IP to char IP
struct in_addr addr;
addr.S_un.S_addr = dwIP;
char *cIP = inet_ntoa(addr);


printf("IP: %s\n",cIP);
system("pause");
}

samin_panahi
جمعه 02 آبان 1393, 14:26 عصر
برای تبديل آيپی به عدد بزرگ از تابع inet_addr (http://msdn.microsoft.com/en-us/library/windows/desktop/ms738563(v=vs.85).aspx) و بر عکسش برای تبديل عدد بزرگ به آيپی از تابع inet_ntoa (http://msdn.microsoft.com/en-us/library/windows/desktop/ms738564(v=vs.85).aspx) استفاده ميشه
در ويندوز:
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>


#pragma comment(lib, "ws2_32.lib")


int main()
{
//IP address to unsigned long
DWORD dwIP = inet_addr("192.168.0.1"); //unsigned long


//Long IP to char IP
struct in_addr addr;
addr.S_un.S_addr = dwIP;
char *cIP = inet_ntoa(addr);


printf("IP: %s\n",cIP);
system("pause");
}


حالا چطور رشته ای که کاربر وارد می کنه رو تبدیل به DWORD کنم؟

string str_sIp;
cin>>str_sIp;
DWORD dwIP = inet_addr(str_sIp);
//....


این جوری می نویسم قبول نمی کنه

negative60
جمعه 02 آبان 1393, 15:47 عصر
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#include <iostream>


#include <string>
#include <stdlib.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;


int main()
{
string str_sIp;

cout << "Please enter IP: " << endl;
cin >> str_sIp;



//IP address to unsigned long
//int A,B,C,D;
//A = 192;
//B = 168;
//C = 0;
//D = 1;


//DWORD dwIP = A * (256*256*256) + B * (256*256) + C * 256 + D;
//DWORD dwIP = inet_addr("192.168.0.1"); //unsigned long lngIP = inet_addr("192.168.0.1");
DWORD dwIP = inet_addr(str_sIp.c_str());


//Long IP to char IP
struct in_addr addr;
addr.S_un.S_addr = dwIP;


char *cIP = inet_ntoa(addr);


printf("IP: %s\n",cIP);
system("pause");
}