Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / перевод строки с ip в массив unsigned char / 21 сообщений из 21, страница 1 из 1
25.11.2013, 10:25
    #38476240
RENTV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
Здравствуйте
Помогите пожалуйста, нужно перевести строку вида "192.168.0.1" в массив unsigned char и обратно
То есть получить
mas[0] = 0xC0;
mas[1] = 0xA8;
mas[2] = 0x00;
mas[3] = 0x01;

и потом из него снова строку "192.168.0.1"

На куски между точек распилил, IntToHex-ом преобразовал, а что дальше - хз..
...
Рейтинг: 0 / 0
25.11.2013, 10:37
    #38476257
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
RENTVНа куски между точек распилил, IntToHex-ом преобразовал, а что дальше - хз..IntToHex не нужен. Преобразуете каждый кусочек в число (например, функцией atoi) и это число пишете в массив.
...
Рейтинг: 0 / 0
25.11.2013, 10:37
    #38476258
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
RENTV,

а зачем тебе IP адрес в виде массива unsigned char?
...
Рейтинг: 0 / 0
25.11.2013, 12:02
    #38476385
Ken@t
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
...
Рейтинг: 0 / 0
26.11.2013, 01:57
    #38477525
RENTV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
miksoft , спасибо, попробую..

MasterZiv , чтобы потом передать/получить его, как часть посылки, через Socket->SendBuf(,);
У меня есть 2 программы: "сервер" и "шлюз", которые находятся в сети X. Шлюз поддерживает связь с устройствами сети Y (она нестабильна). В БД есть связь устройство<->ip_сети_Y. Мне нужно от сервера отправить посылку устройству в сеть Y. Решил посылку к прибору дополнить ip адресом, чтобы шлюз знал кому переправлять.

Ken@t , нуничегосебе
даж не слышал про такое раньше, спасибо=)
...
Рейтинг: 0 / 0
26.11.2013, 02:24
    #38477535
RENTV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
Ken@t , ваш вариант оказался несколько сложнее.. так что воспользовался предложением miksoft .
Если кому потом пригодится -

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
	AnsiString ss[4];
	AnsiString input="192.168.109.065.";
	AnsiString temp;
	int count = 0;
	for(int i=1;i<=input.Length();i++)
	{
		if(input[i] != '.')
		{
			temp += input[i];
		}
		else
		{
			if(count < 4)
			{
				ss[count] = temp;
				temp = "";
				count++;
			}
		}
	}

	unsigned char Message[4];

	for(int zzz=0; zzz<4; zzz++) Message[zzz] = 0x00;
	Message[0] = atoi(ss[0].c_str());
	Message[1] = atoi(ss[1].c_str());
	Message[2] = atoi(ss[2].c_str());
	Message[3] = atoi(ss[3].c_str());

	Memo->Lines->Add(IntToStr(Message[0]) + "." + IntToStr(Message[1]) + "." + IntToStr(Message[2]) + "." + IntToStr(Message[3]));


всем огромное спасибо за помощь!
...
Рейтинг: 0 / 0
26.11.2013, 06:11
    #38477570
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
RENTV,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
        sockaddr_in addr;
        addr=TcpClient1->GetSocketAddr(TcpClient1->LocalHostAddr(),"0");

        Memo1->Lines->Add(IntToStr(addr.sin_addr.S_un.S_un_b.s_b1) + "." 
                + IntToStr(addr.sin_addr.S_un.S_un_b.s_b2) + "."
                + IntToStr(addr.sin_addr.S_un.S_un_b.s_b3) + "."
                + IntToStr(addr.sin_addr.S_un.S_un_b.s_b4));
...
Рейтинг: 0 / 0
26.11.2013, 10:55
    #38477792
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
RENTV miksoft , спасибо, попробую..

MasterZiv , чтобы потом передать/получить его, как часть посылки, через Socket->SendBuf(,);
У меня есть 2 программы: "сервер" и "шлюз", которые находятся в сети X. Шлюз поддерживает связь с устройствами сети Y (она нестабильна). В БД есть связь устройство<->ip_сети_Y. Мне нужно от сервера отправить посылку устройству в сеть Y. Решил посылку к прибору дополнить ip адресом, чтобы шлюз знал кому переправлять.

Ken@t , нуничегосебе
даж не слышал про такое раньше, спасибо=)

Так может быть тебе все же int32 нужен, а не массив 4 байт? Это очень похоже, но не совсем полого и то же. Разница в порядке следования байт. (ее может и не быть вообще).

Но для преобразования int32 в сетевой формат есть специальные функции в библиотеке сокетов.
...
Рейтинг: 0 / 0
27.11.2013, 05:05
    #38479230
RENTV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
m_Sla , эм.. спасибо))

MasterZiv если честно - не очень понял... В свойствах сокета ip, где я сталкивался, везде стринг. В SendBuf нужен char..
При чем массив из 4 кусков ip это лишь часть массива-посылки, засылаемого в SendBuf.
([флаг начала посылки] [длина посылки] [ip][ip][ip][ip] [данные]...[данные] [CRC][CRC])

Зачем тут int32?..
...
Рейтинг: 0 / 0
27.11.2013, 11:47
    #38479521
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
RENTV m_Sla , эм.. спасибо))

MasterZiv если честно - не очень понял... В свойствах сокета ip, где я сталкивался, везде стринг.
.

Перечисляй.


RENTVВ SendBuf нужен char..
.

Там нужен не char, а массив байт. Т.е. голый буфер памяти.
В язвках С и С++ голый буфер представляется как

Код: plaintext
1.
2.
3.
char buf[BUFSIZE];
// or
char *p_buf =  buf;



RENTVЗачем тут int32?..

Блин, да потому что IP-адрес (IP4) -- это int32.

Не, дело твоё, конечно, если ты сам там всем рулишь, то вперёд.
...
Рейтинг: 0 / 0
27.11.2013, 18:25
    #38480401
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
MasterZiv...
Блин, да потому что IP-адрес (IP4) -- это int32.

int или unsigned int32 ?

в Windows, вроде , или набор unsigned char или u_long
...
Рейтинг: 0 / 0
27.11.2013, 19:58
    #38480602
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
Leonid Kudryavtsev,

По факту unsigned.
...
Рейтинг: 0 / 0
28.11.2013, 09:30
    #38481127
RENTV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
MasterZivПеречисляй.


Код: plaintext
1.
2.
ClientSocket1->Address 
ServerSocket1->Socket->Connections[i]->RemoteAddress





MasterZivТам нужен не char, а массив байт. Т.е. голый буфер памяти.
В язвках С и С++ голый буфер представляется как

Код: plaintext
1.
2.
3.
char buf[BUFSIZE];
// or
char *p_buf =  buf;



согласный

MasterZivНе, дело твоё, конечно, если ты сам там всем рулишь, то вперёд.
Видимо я все сам рулю, потому что в данном случае ip передается не как ip, а просто как служебная часть рукотворной посылки между программами, и, прежде чем стать именно свойством сокета - эта часть посылки преобразуется опять же вручную в стринг, которого требуют описанные в самом начале поста свойства.
В моих нуждах нигде не встречается ip, как int32...
Ну или я так и не понял о чем ты говоришь
...
Рейтинг: 0 / 0
28.11.2013, 14:02
    #38481735
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
RENTVпрежде чем стать именно свойством сокета - эта часть посылки преобразуется
опять же вручную в стринг, которого требуют описанные в самом начале поста свойства.
Выкинуть к ЧМ эти свойства. API сокетов принимает адрес только как целое число (набор
байт) и никогда - как строку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.11.2013, 14:33
    #38481805
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
преобразуется ... в стринг..

стрингом в C принято называть NULL терминатед строки.
Что для IP адреса, который в бинарном виде может содержать 0, явно не лучший термин.

IMHO & AFAIK
...
Рейтинг: 0 / 0
28.11.2013, 22:01
    #38482585
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
Leonid Kudryavtsevстрингом в C принято называть NULL терминатед строки.NULL это всегда указатель. Им ничего заканчиваться не может. А строки в С, заканчиваются нулем.
...
Рейтинг: 0 / 0
28.11.2013, 22:15
    #38482590
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
White Owl,

Вообще-то это устоявшийся термин - null-terminated string.
...
Рейтинг: 0 / 0
28.11.2013, 22:38
    #38482604
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
Anatoly MoskovskyWhite Owl,

Вообще-то это устоявшийся термин - null-terminated string.null и NULL это разные вещи вообще-то.
null character это '\0', оно-же NUL в ASCII.
А NULL это всегда #define NULL (void*)0
...
Рейтинг: 0 / 0
28.11.2013, 22:45
    #38482615
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
White Owl,

Ну так по этой логике в первую очередь претензии должны быть к слову "терминатед" - ведь такого слова вообще нет :)
...
Рейтинг: 0 / 0
28.11.2013, 23:41
    #38482674
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
Anatoly MoskovskyWhite Owl,

Вообще-то это устоявшийся термин - null-terminated string.

Ещё называется иногда ASCIIZ-строка.
...
Рейтинг: 0 / 0
29.11.2013, 01:14
    #38482732
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перевод строки с ip в массив unsigned char
Anatoly MoskovskyWhite Owl,

Ну так по этой логике в первую очередь претензии должны быть к слову "терминатед" - ведь такого слова вообще нет :)Неа.
"терминатед" это испорченная транскрипция существующего слова. Но вполне конкретного и понятного по контексту. А null и NULL это ключевые слова которые можно спутать, и которые меняют смысл текста.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / перевод строки с ip в массив unsigned char / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]