Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Составить функцию, которая, получив целое число определяет, уменьшается ли оно в целое число раз - C++
задание такое Составить функцию, которая, получив целое число определяет, уменьшается ли оно в целое число раз, если у него удалить...

Написать объявление функции, возвращающую целое число и принимающую указатель на целое число - C++
объявите функцию f2, возвращающую результат целого типа и передающую указатель на переменную а целого типа. вызовите функцию f2 с...

Если целое число М делится на целое число N, то на экран выводится частное от деления, в противном случае выводится сообщение - C++
Если целое число М делится на целое число N, то на экран выводится частное от деления, в противном случае выводится сообщение «M на N...

Дано целое число N (> 0). Найти сумму N2 + (N + 1)2+ (N + 2)2+ … + (2*N)2 (целое число) - C++
Дано целое число N (&gt; 0). Найти сумму N2 + (N + 1)2+ (N + 2)2+ … + (2*N)2 (целое число).подскажите как решается или подскажите где можно...

Написать функцию, которая принимает 32 битное целое число и возвращает 16 битное целое число - C++
Помогите написать программу, использующую функцию, которая принимает 32 битное целое число и возвращает 16 битное целое число, состоящее из...

Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д. - C++
Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д. ...

14
solar_wind
757 / 748 / 42
Регистрация: 06.07.2009
Сообщений: 2,970
Завершенные тесты: 1
03.06.2014, 11:56 #2
memcpy(указатель на вектор,указатель на int,4);
0
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’)
0
solar_wind
757 / 748 / 42
Регистрация: 06.07.2009
Сообщений: 2,970
Завершенные тесты: 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);
0
castaway
Эксперт С++
4887 / 3022 / 370
Регистрация: 10.11.2010
Сообщений: 11,080
Записей в блоге: 10
Завершенные тесты: 1
03.06.2014, 12:04 #5
А во вчерашней теме не судьба дискуссию продолжить?
Vector<unsigned char> в int
0
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
03.06.2014, 12:07 #6
Цитата Сообщение от diplomat1129 Посмотреть сообщение
приходи 4 байта.т.е. в векторе 4 элемента и мне надо получить из них int.
Байтордер-то какой?
В простейшем случае:
int comm = *(int*)dat.data();
0
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.
0
solar_wind
757 / 748 / 42
Регистрация: 06.07.2009
Сообщений: 2,970
Завершенные тесты: 1
03.06.2014, 12:19 #8
diplomat1129, Смотря откуда ты данные берешь. Если из сокета, то там можно указать максимальное число байт, которые ты хочешь взять из буфера.
0
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?или надо одним разом хапнуть?
0
solar_wind
757 / 748 / 42
Регистрация: 06.07.2009
Сообщений: 2,970
Завершенные тесты: 1
03.06.2014, 12:24 #10
diplomat1129, size это и есть количество байт, которые ты хочешь принять.
Но проще взять указатель на первый байт числа и использовать memcpy, тогда тебе остальные байты мешать не будут.
0
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?
0
solar_wind
757 / 748 / 42
Регистрация: 06.07.2009
Сообщений: 2,970
Завершенные тесты: 1
03.06.2014, 12:34 #12
diplomat1129, Остальные данные в сокете конечно останутся и будут ждать, пока их извлечешь.
memcpy это просто копирование памяти. Передаешь туда два указателя и количество байт, он из одной области памяти в другую их копирует. Почитай описание в сети.

Добавлено через 42 секунды
diplomat1129, Когда ты из сокета берешь 4 байта, то из буфера эти байты удаляются естественно.
1
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
0
solar_wind
757 / 748 / 42
Регистрация: 06.07.2009
Сообщений: 2,970
Завершенные тесты: 1
03.06.2014, 12:40 #14
diplomat1129, Косяк значит где то. Берешь отладчик и смотришь что тебе приходит и что ты куда записал.
0
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

при двух обращениях.собственно я уже близко)
0
03.06.2014, 12:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2014, 12:48
Привет! Вот еще темы с ответами:

Дано целое число m. получить найбольщее целое k при котором 4^k<m - C++
дано целое число m. получить найбольщее целое k при котором 46^k&lt;m Добавлено через 1 минуту извините есть ошибка вот правильная...

Дано целое число (N>0) найти наибольшее целое числа k, квадрат которого не превосходит N:k^2<=N - C++
Помогите пожалуйста сделать задачу. Нужно сделать на С++. Вот условие: Дано целое число (N&gt;0) найти наибольшее целое числа k, квадрат...

Сформировать строку из заданного массива, превратив каждое целое число в символ, имеющий указанный код - C++
Двухмерный массив содержит целые числа и заполняется случайным образом значениями из интервалa . Пользователь задаёт размерность массива с...

Поле first — целое число, левая граница диапазона, включается в диапазон; поле second — целое число, правая граница диапазона, не включается в диапазо - C++
8. Поле first — целое число, левая граница диапазона, включается в диапазон; поле second — целое число, правая граница диапазона, не...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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