powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / перевод строки с ip в массив unsigned char
21 сообщений из 21, страница 1 из 1
перевод строки с ip в массив unsigned char
    #38476240
RENTV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте
Помогите пожалуйста, нужно перевести строку вида "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
перевод строки с ip в массив unsigned char
    #38476257
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RENTVНа куски между точек распилил, IntToHex-ом преобразовал, а что дальше - хз..IntToHex не нужен. Преобразуете каждый кусочек в число (например, функцией atoi) и это число пишете в массив.
...
Рейтинг: 0 / 0
перевод строки с ip в массив unsigned char
    #38476258
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RENTV,

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

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

Ken@t , нуничегосебе
даж не слышал про такое раньше, спасибо=)
...
Рейтинг: 0 / 0
перевод строки с ip в массив unsigned char
    #38477535
RENTV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
перевод строки с ip в массив unsigned char
    #38477570
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
перевод строки с ip в массив unsigned char
    #38477792
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RENTV miksoft , спасибо, попробую..

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

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

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

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

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

Зачем тут int32?..
...
Рейтинг: 0 / 0
перевод строки с ip в массив unsigned char
    #38479521
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
перевод строки с ip в массив unsigned char
    #38480401
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv...
Блин, да потому что IP-адрес (IP4) -- это int32.

int или unsigned int32 ?

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

По факту unsigned.
...
Рейтинг: 0 / 0
перевод строки с ip в массив unsigned char
    #38481127
RENTV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
перевод строки с ip в массив unsigned char
    #38481735
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RENTVпрежде чем стать именно свойством сокета - эта часть посылки преобразуется
опять же вручную в стринг, которого требуют описанные в самом начале поста свойства.
Выкинуть к ЧМ эти свойства. API сокетов принимает адрес только как целое число (набор
байт) и никогда - как строку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
перевод строки с ip в массив unsigned char
    #38481805
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
преобразуется ... в стринг..

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

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

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

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

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

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

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

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


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