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

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

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

Конкатенация двух переменных типа int32 - C++

27.03.2013, 09:55. Просмотров 570. Ответов 4
Метки нет (Все метки)

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

Буду очень благодарен, если кто что подскажет. Спасибо

C++
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
#include <iostream>
#include <sstream>
 
typedef unsigned int  UInt32;
 
typedef struct tagWorkBlock{
    
unsigned int    CodeMsg[36];
unsigned int    CodePos[8];
unsigned int    CodeTime[28];
} WorkBlock;
 
int read_inp(WorkBlock *wb){
 
for (i=0;i<8;i++) {
fscanf(FINP,"%2x",&tmp);
wb->CodePos[i]=tmp;}
 
for (i=0;i<28;i++) {    
fscanf(FINP,"%2x",&tmp);
wb->CodeTime[i]=tmp;}
 
std::stringstream stream;
stream << wb->CodeTime << wb->CodePos;
stream >> wb->CodeMsg;
 
 fclose(FINP);
return 0;   
}

Ошибка про компиляции: no match for ‘operator>>’ in ‘stream >> wb->tagWorkBlock::CodeMsg’perator
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2013, 09:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конкатенация двух переменных типа int32 (C++):

Конкатенация двух переменных - C++
Доброго времени суток! Прошу прощения за такой вопрос но нет времени искать решение в интернете и я только два дня как начал учить с++! Мне...

Почему при умножении двух переменных типа int выдает ответ 76? - C++
Помогите понять, почему при x*y выдает ответ 76? :wall: Откуда взялись эти числа? #include &lt;iostream&gt; using namespace std; ...

Конкатенация двух нибблов (сложение двух полубайт в байт) - C++
Как из этих двух полубайт получить полноценный байт со значение &quot;0x3e&quot;? unsigned char first_nibbl = 0x03 unsigned char last_nibbl =...

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

Конкатенация двух чисел - C++
Уважаемые киберфорумчане помогите пожалуйста. Как осуществить конкатенацию двух чисел (десятичных int) (c++) Пример при вводе чисел ...

Объединение (конкатенация) двух односвязных списков - C++
Задача: Построить стек (односвязный список). Показать реализацию стека на следующем примере: сцепить два связанных списка данных...

4
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
27.03.2013, 11:29 #2
C++
1
stream << wb->CodeTime << wb->CodePos;
Тут Вы выводите в строковый поток значения указателей, а не сами массивы CodeTime и CodePos.
C++
1
stream >> wb->CodeMsg;
Тут пытаетесь записать в указатель на массив. Что, собственно, не может быть реализовано.
P.S. И зачем Вы вводите
C++
1
typedef unsigned int  UInt32;
если не используете его? Хотя такой typedef тоже ни к чему хорошему не приведет. Следует использовать типы из <cstdint>.
Теперь возвращаясь к теме:
Цитата Сообщение от Forester04 Посмотреть сообщение
Друзья, уже третий день бьюсь с проблемой объединения двух получаемых из файла строк Uint32.
Что есть строка Uint32 в Вашем понимании?
1
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
27.03.2013, 11:37 #3
Строки с 23 по 25 замените на что-то вроде:
C++
1
2
   std::copy(wb->CodeTime, wb->CodeTime + 28, wb->CodeMsg);
   std::copy(wb->CodePos, wb->CodePos + 8, wb->CodeMsg + 28);
1
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
27.03.2013, 11:50 #4
Цитата Сообщение от Forester04 Посмотреть сообщение
Друзья, уже третий день бьюсь с проблемой объединения двух получаемых из файла строк Uint32. Можно ли как-то вообще реализовать это в С++ без присвоения другого типа переменным?
инты не конкатенируют, их складывают. Или речь о сборке int64_t из двойных слов? Ну так пиши в старшее и в младшее двойное слово по адресам.

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
uint32_t h;
uint32_t l;
int64_t x;
...
/*Для интелла:*/
(*(uint32_t *)(&x))=l;
(*((uint32_t *)(&x)+1))=h;
/*Для мотороллы:*/
(*(uint32_t *)(&x))=h;
(*((uint32_t *)(&x)+1))=l;
/*Универсально:*/
x=((int64_t)l)+(((int64_t)h)<<32);
1
Forester04
0 / 0 / 0
Регистрация: 26.07.2010
Сообщений: 24
27.03.2013, 13:21  [ТС] #5
Цитата Сообщение от anmartex Посмотреть сообщение
Строки с 23 по 25 замените на что-то вроде:
C++
1
2
   std::copy(wb->CodeTime, wb->CodeTime + 28, wb->CodeMsg);
   std::copy(wb->CodePos, wb->CodePos + 8, wb->CodeMsg + 28);

Это сработало! Вы помогли мне сделать именно то, что я и хотел.

Спасибо большое!


И всем остальным тоже спасибо за помощь
0
27.03.2013, 13:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2013, 13:21
Привет! Вот еще темы с ответами:

Вывести результат двух операций с использованием двух переменных - C++
Такие дела: надо ввести с клавиатуры 4 переменные, используя только 2 int, и посчитать результат двух выражений Есть такой вариант, но...

сравение переменных типа char - C++
Доброго времени суток, у меня возникла проблема... Нужно ввести название товара, и что бы на экран вывелась информация об этом товаре ...

Присвоение переменных разного типа - C++
Использую я значит вот такую строку, пытаясь получить возвращаемые данные char и ulong. ULONG ModuleAddress, char ModuleName =...

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


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

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

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