Вопрос по c++ – C ++, как преобразовать IP-адрес в байтах?
Как бы я конвертировать IP-адрес в байтах в C ++? В основном, как мне разобрать IP-адрес? Например, если у меня есть строка, равная121.122.123.124
.
I need to parse this such that byte1 = 121
, byte2 = 122
, byte3 = 123
, byte4 = 124
.
getline
с.
как разделитель стоило бы рассмотреть.
Я пытался читать по одному символу за раз, но я не мог выяснить, как заставить его переключаться с байта 1 на байт 2 и так далее, как только "а"; был найден.
4
ответа
Попробуй это:
char ipstr[] = "121.122.123.124";
char *marker, *ret;
unsigned char b1, b2, b3, b4;
ret = strtok_r(ipstr, ".", &marker);
b1 = (unsigned char)strtod(ret, NULL);
ret = strtok_r(NULL, ".", &marker);
b2 = (unsigned char)strtod(ret, NULL);
ret = strtok_r(NULL, ".", &marker);
b3 = (unsigned char)strtod(ret, NULL);
ret = strtok_r(NULL, ".", &marker);
b4 = (unsigned char)strtod(ret, NULL);
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
std::string
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
С помощьюsscanf()
функция:
#include <cstdio>
char arr[] = "192.168.1.102";
unsigned short a, b, c, d;
sscanf(arr, "%hu.%hu.%hu.%hu", &a, &b, &c, &d);
Error: User Rate Limit Exceeded
unsigned char
Error: User Rate Limit Exceededunsigned short
Error: User Rate Limit Exceeded%c
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
\0
Error: User Rate Limit Exceeded
использованиеinet_aton
.
#include <arpa/inet.h>
#include <string>
#include <iostream>
int
main(int argc, char *argv[])
{
std::string s;
in_addr addr;
while(std::cin >> s && inet_aton(s.c_str(), &addr)) {
std::cout << inet_ntoa(addr) << "\n";
}
}
Если шаблон постоянен, точка точка, точка, точка и т. Д., Используйте istringstream:
#include <sstream>
using namespace std;
int byte1, byte2, byte3, byte4;
char dot;
char *ipaddress = "121.122.123.124";
istringstream s(ipaddress); // input stream that now contains the ip address string
s >> byte1 >> dot >> byte2 >> dot >> byte3 >> dot >> byte4 >> dot;
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Похожие вопросы
<code>getline</code> с<code>.</code> как разделитель стоило бы рассмотреть.
Я пытался читать по одному символу за раз, но я не мог выяснить, как заставить его переключаться с байта 1 на байт 2 и так далее, как только "а"; был найден.