Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2015, 12:20   #1
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию Присвоение типов

Здравствуйте. Пишу серверную часть, принимаются данные в unsigned int, но на выводе число не равно отправленному

Код:
unsigned int command;
bytes_recv = recv(ws->client[j]->socket, (char*)&command, 4, 0);
Вывод в консоль говорит что это число 16777232 но было отправлено и принято 0x10000001 (через сниффер смотрел) и bytes_recv == 4

пытался сделать

Код:
static char command[4];
bytes_recv = recv(ws->client[j]->socket, (char*)&command[0], 4, 0);
Отладчик так же показывает что в command находится
command[0] = 16 (0x10)
command[1] = 0 (0)
command[2] = 0 (0)
command[3] = 1 (0x1)

но при выводе в консоль там число 8934312

Код:
std::cout << "Command: " << (unsigned int)command << std::endl;

switch ((unsigned int)command)
{
	case ME_HELLO /* = 0x10000001 */:
	{
		std::cout << "Ping from socket " << ws->client[j]->socket << std::endl;
	}
}
Подскажите пожалуйста как правильно привести тип и использовать его как число

в делфи работает такая конструкция
Код:
var command:dword;
bytes_recv := recv(sock, command, 2, 0);
Здравствуйте

Последний раз редактировалось NEoMASTERR; 16.12.2015 в 12:24.
NEoMASTERR вне форума Ответить с цитированием
Старый 16.12.2015, 13:19   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но при выводе в консоль там число 8934312
Может ты опять не то выводишь что надо?
Поставь бряк сразу после recv() и посмотри что упадет в command в первой вариации твоего кода, где эта переменка - число.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.12.2015, 13:20   #3
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Может ты опять не то выводишь что надо?
Поставь бряк сразу после recv() и посмотри что упадет в command в первой вариации твоего кода, где эта переменка - число.
я там сразу и смотрел, приходит всё верно, выводится как то неправильно, 0x10000001 это 268435457, сейчас вывелось 1201064


видимо вывелся адрес, изменил на
Код:
std::cout << "Command: " << (unsigned int)*command << std::endl;
вывелось число 16 (1ый байт, а надо все 4 и в виде одного числа unsigned int)

Пардон, вариант с целым числом вот


16777232 = 0x1000010
Здравствуйте

Последний раз редактировалось NEoMASTERR; 16.12.2015 в 13:34.
NEoMASTERR вне форума Ответить с цитированием
Старый 16.12.2015, 14:19   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

т.е. про сетевой порядок байтов и функции из семейства https://msdn.microsoft.com/ru-ru/lib...(v=vs.85).aspx вы ничего не слышали?
p51x вне форума Ответить с цитированием
Старый 16.12.2015, 15:22   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2p51x
сетевой порядок байт конечно важен, но проявится он при запуске клиента и сервера на машинах с разным порядком байт. очевидно же, что товарищ все запускает локально, в пределах одной машины.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 16.12.2015, 15:25   #6
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
т.е. про сетевой порядок байтов и функции из семейства https://msdn.microsoft.com/ru-ru/lib...(v=vs.85).aspx вы ничего не слышали?
Спасибо, htonl сработал, но в делфи ведь ничего такого не требовалось, данные были в том же порядке как при отправке так и при приёме.
Так теперь все данные конвертировать? Там же будут и строки, и структуры
Забегу вперёд, этот сервер будет стоять на линуксе (пока конкретно CentOs, дальше посмотрим)
Здравствуйте
NEoMASTERR вне форума Ответить с цитированием
Старый 16.12.2015, 16:04   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
сетевой порядок байт конечно важен, но проявится он при запуске клиента и сервера на машинах с разным порядком байт. очевидно же, что товарищ все запускает локально, в пределах одной машины.
Или когда клиент выполняет преобразование и порядок байт машины отличен, а сервер, который ТС и пишет, не задумывается об этом.
p51x вне форума Ответить с цитированием
Старый 16.12.2015, 16:08   #8
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Или когда клиент выполняет преобразование и порядок байт машины отличен, а сервер, который ТС и пишет, не задумывается об этом.
Клиент тоже я пишу, на делфи. Сервер был на делфи и проблем не было, но пора переходить на линукс вот и взялся за с++. Так что не надо решать что то за меня, я сам знаю о чем я задумываюсь.
Здравствуйте
NEoMASTERR вне форума Ответить с цитированием
Старый 16.12.2015, 17:01   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Я вообще про сервер писал... Но раз вы приняли на свой счет, то это повод задуматься.

П.С. Возьмите Lazarus и будет вам делфи в линукс.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПРИСВОЕНИЕ ID limon142 PHP 11 07.07.2014 09:52
Присвоение переменной gajubas PHP 1 21.04.2010 20:18
присвоение значения Stjernen Microsoft Office Excel 5 04.01.2010 14:44
присвоение номера С++ Annabel Помощь студентам 13 15.11.2009 23:44
Присвоение ID artemavd БД в Delphi 2 20.04.2009 14:45