Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
#1

Из массива в целое число - C++

03.06.2014, 11:50. Просмотров 273. Ответов 14
Метки нет (Все метки)

Есть вектор
C++
1
vector<byte>
byte - unsigned char
приходи 4 байта.т.е. в векторе 4 элемента и мне надо получить из них int.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2014, 11:50     Из массива в целое число
Посмотрите здесь:

C++ switch не целое число
Целое число C++
Дано вещественное число A и целое число N C++
C++ целое число К
C++ целое число 8 байт
Целое число N>0 C++
Дано целое число C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
solar_wind
755 / 746 / 42
Регистрация: 06.07.2009
Сообщений: 2,967
Завершенные тесты: 1
03.06.2014, 11:56     Из массива в целое число #2
memcpy(указатель на вектор,указатель на int,4);
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
03.06.2014, 11:58  [ТС]     Из массива в целое число #3
C++
1
2
 int comm;
                        memcpy(*receiveData.data(),*comm,4);
NMClient.cpp: In member function ‘void* NMClient::Run_Client(void*)’:
NMClient.cpp:116:53: error: invalid type argument of unary ‘*’ (have ‘int’)
solar_wind
755 / 746 / 42
Регистрация: 06.07.2009
Сообщений: 2,967
Завершенные тесты: 1
03.06.2014, 12:02     Из массива в целое число #4
скорее всего как то так должно быть:
C++
1
2
int comm;
memcpy(receiveData.data(),&comm,4);
Добавлено через 1 минуту
а, нет, ошибся, наоборот
C++
1
2
int comm;
memcpy(&comm,receiveData.data(),4);
castaway
Эксперт С++
4879 / 3015 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
03.06.2014, 12:04     Из массива в целое число #5
А во вчерашней теме не судьба дискуссию продолжить?
Vector<unsigned char> в int
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
03.06.2014, 12:07     Из массива в целое число #6
Цитата Сообщение от diplomat1129 Посмотреть сообщение
приходи 4 байта.т.е. в векторе 4 элемента и мне надо получить из них int.
Байтордер-то какой?
В простейшем случае:
int comm = *(int*)dat.data();
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
03.06.2014, 12:17  [ТС]     Из массива в целое число #7
Извиняюсь, забыл что вчера поднимал тему. ну тогда проще тут продолжать а ту удалять

Добавлено через 7 минут
Странно и в первом и во втором случае опять нули возвращает
В общем клиент который мне шлет байты, в отладчике шлет следующее..он шлет 28 байт.
я принимаю сначала 4 байта.0 0 0 0.тут должен выйти 0. потом принимаю еще 4 байта. там мне приходит 1 0 0 0.тут уже я должен получить 1.ну или хотя бы не 0, чтобы проверку пройти.а у меня в двух проверках нули приходят. или если мне шлют 28 то я за 1 раз могу только 28 принять?я переписываю клиент на с++.он был раньше на шарпах написан.и там этот принцип работает.

Добавлено через 1 минуту
просто если нельзя кусками принимать. то может принять 1 раз и как-то частями значения брать..сначала 4 взять.посмотреть что за число..потом еще 4.
solar_wind
755 / 746 / 42
Регистрация: 06.07.2009
Сообщений: 2,967
Завершенные тесты: 1
03.06.2014, 12:19     Из массива в целое число #8
diplomat1129, Смотря откуда ты данные берешь. Если из сокета, то там можно указать максимальное число байт, которые ты хочешь взять из буфера.
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
03.06.2014, 12:20  [ТС]     Из массива в целое число #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vector<byte> resBuffer;
        unsigned char buffer[size];
 
        int res;
        //Receive a reply from the server
        res = recv(sock , &buffer , size , 0);
 
        if( res < 0)
        {
            puts("recv failed");
        }
        /*for(int i = 0; i <= 3; i++){
            cout<<buffer[i];
        }*/
 
        resBuffer.insert(resBuffer.end(), buffer, buffer + size);
        return resBuffer;
ну вот мне клиент шлет одним разом 28 байт..я беру из сокета..я могу взять сначала 4..а потом вызывая еще раз эту функцию с сокетом, взять еще следующие 4?или надо одним разом хапнуть?
solar_wind
755 / 746 / 42
Регистрация: 06.07.2009
Сообщений: 2,967
Завершенные тесты: 1
03.06.2014, 12:24     Из массива в целое число #10
diplomat1129, size это и есть количество байт, которые ты хочешь принять.
Но проще взять указатель на первый байт числа и использовать memcpy, тогда тебе остальные байты мешать не будут.
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
03.06.2014, 12:30  [ТС]     Из массива в целое число #11
про size я знаю..интересует, останутся ли данные с сокете.если пришло 28 байт, а я взял 4, то остануться ли остальные 24 ждать пока я их заберу?.и можно пример с memcpy?или наверное роли не сыграет?

Добавлено через 4 минуты
или возможно что при каждом обращении к сокету, когда беру 4 байта я беру одни и теже 4 байта?т.е. надо взять сначала первые 4 байта.при втором обращении к сокету взять например 8 байт.только первые 4 отбросить,т.к. они были уже взяты и смотреть следующие 4?
solar_wind
755 / 746 / 42
Регистрация: 06.07.2009
Сообщений: 2,967
Завершенные тесты: 1
03.06.2014, 12:34     Из массива в целое число #12
diplomat1129, Остальные данные в сокете конечно останутся и будут ждать, пока их извлечешь.
memcpy это просто копирование памяти. Передаешь туда два указателя и количество байт, он из одной области памяти в другую их копирует. Почитай описание в сети.

Добавлено через 42 секунды
diplomat1129, Когда ты из сокета берешь 4 байта, то из буфера эти байты удаляются естественно.
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
03.06.2014, 12:38  [ТС]     Из массива в целое число #13
просто там вот приходят сначала 4 байта нули - служебные.потом 4 байта -еще однм команда но уже не нули..следующие 4 байта-идентификатор клиента.следующие 4 это длина имени клиента..а потом идут каждые 2 байта - буква клиента.и вот когда ответ по циклу кидаю на вывод - буквы клиента выводяться..т.е. от другого клиента передача норм приходит..т.е. это я не могу норм команды из ответа извлечь, что получаются и 1 и 2 команда нули..но вторая явно не 0. там 1 0 0 0
solar_wind
755 / 746 / 42
Регистрация: 06.07.2009
Сообщений: 2,967
Завершенные тесты: 1
03.06.2014, 12:40     Из массива в целое число #14
diplomat1129, Косяк значит где то. Берешь отладчик и смотришь что тебе приходит и что ты куда записал.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2014, 12:48     Из массива в целое число
Еще ссылки по теме:

C++ проверка на целое число
C++ Ввести целое число
C++ Дано вещественное число A и целое число N (> 0)
Даны вещественное число x и целое число n > 0 C++
Сформировать строку из заданного массива, превратив каждое целое число в символ, имеющий указанный код C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
03.06.2014, 12:48  [ТС]     Из массива в целое число #15
да вот в линуксе сижу..нетбинс косячик в отладчике..тяжело пошагово все отладить..
C++
1
2
int comm;
                        memcpy(&comm, receiveData.data(), 4);
receiveData - это вектор который приходит из функции приема от другого клиента данных..собственно если эту переменную пустить так
C++
1
2
/*for (std::vector<byte>::iterator it = receiveBuff.begin(); it != receiveBuff.end(); ++it)
                        std::cout << ' ' << *it;*/
то имя клиента и выводиться в консоль.но что странно только буквы из всего буфера..хотя там еще команды лежат..в любом слуае вектор не пустой и там лежит мой пришедший буфер и я закидываю в другую область памяти и тут 0 ((

Добавлено через 4 минуты
C++
1
2
for (std::vector<byte>::iterator it = receiveBuff.begin(); it != receiveBuff.end(); ++it)
                        std::cout << ' ' << (int)*it;
только так выводит
0 0 0 0
1 0 0 0

при двух обращениях.собственно я уже близко)
Yandex
Объявления
03.06.2014, 12:48     Из массива в целое число
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru