возможно ли такую структуру конвертировать в строку
От: Аноним  
Дата: 11.11.11 10:11
Оценка:
возможно ли такую структуру конвертировать в строку

struct a
{
char v1;
int  v2
char v3[4];
};

v1 v2 и v3 могут быть нулями.
Re: возможно ли такую структуру конвертировать в строку
От: vayerx  
Дата: 11.11.11 10:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>возможно ли такую структуру конвертировать в строку

"конвертировать" aka сериализовать в строку — можно (например, шестью целыми числами в системе счисления на вкус),
"конвертировать" aka интерпретировать как c-строку — не стоит.
Re[2]: возможно ли такую структуру конвертировать в строку
От: diarti  
Дата: 11.11.11 10:49
Оценка:
Здравствуйте, vayerx, Вы писали:

V>Здравствуйте, Аноним, Вы писали:


А>>возможно ли такую структуру конвертировать в строку

V>"конвертировать" aka сериализовать в строку — можно (например, шестью целыми числами в системе счисления на вкус),
V>"конвертировать" aka интерпретировать как c-строку — не стоит.
если Вас не затруднит,покажите как сериализовать
Re[3]: возможно ли такую структуру конвертировать в строку
От: LuciferSingapore Россия  
Дата: 11.11.11 11:05
Оценка: 1 (1)
Здравствуйте, diarti, Вы писали:

D>если Вас не затруднит,покажите как сериализовать


char buffer[100];
sprintf(buffer, "%d %d %d %d %d %d", a.v1, a.v2, a.v3[0], a.v[1], a.v3[2]);
Re[4]: возможно ли такую структуру конвертировать в строку
От: vayerx  
Дата: 11.11.11 11:44
Оценка: -4
забудьте уже про sprintf

Здравствуйте, LuciferSingapore, Вы писали:

LS>
LS>char buffer[100];
LS>snprintf(buffer, sizeof(buffer), "%d %d %d %d %d %d", a.v1, a.v2, a.v3[0], a.v[1], a.v3[2]);
LS>
Re[5]: возможно ли такую структуру конвертировать в строку
От: vayerx  
Дата: 11.11.11 18:13
Оценка: :)
с чем мсье Pavel Dvorkin не согласен?
Re[6]: возможно ли такую структуру конвертировать в строку
От: alsemm Россия  
Дата: 11.11.11 18:21
Оценка:
Здравствуйте, vayerx, Вы писали:

V>с чем мсье Pavel Dvorkin не согласен?

наверное, с тем, что раз в строке форматирования нет ни одного "%s", то использование sprintf разумно.
Re: возможно ли такую структуру конвертировать в строку
От: licedey  
Дата: 13.11.11 19:17
Оценка: +1 -1
Здравствуйте, Аноним, Вы писали:

А>возможно ли такую структуру конвертировать в строку


На плюсах, для саморазвития:
#include <strstream>
#include <string>
using std::strstream;
usgin std:string;

struct a
{
char v1;
int  v2
char v3[4];
string toString() {
  strstream s;
 return (s << (int)v1 - '0' << " " << v2 << " " << atoi(v3)).str();
}
};

А>v1 v2 и v3 могут быть нулями.
Re[7]: возможно ли такую структуру конвертировать в строку
От: vayerx  
Дата: 14.11.11 08:38
Оценка: :)
Здравствуйте, alsemm, Вы писали:

V>>с чем мсье Pavel Dvorkin не согласен?

A>наверное, с тем, что раз в строке форматирования нет ни одного "%s", то использование sprintf разумно.

переполнение буфера может возникать только при "%s"?
для write-once кода, наверно, можно пользоваться sprintf'ом. но, код, который дописывают, рефакторят и всячески насилуют, может и в такое превратиться.
ну и надо ли говорить, что будет, если int таки расширится до 64+ бит, а в структуру добавится пара полей? разработчик на переполнение может и не нарваться, если работает с маленькими числами.
собственно, мысль в том, что накладные расходы на snprintf в подавляющем большинстве случаев пренебрежимо малы, а надежность кода и безопасность его модификации возрастает. так зачем же раскладывать лишние грабли?
Re[2]: возможно ли такую структуру конвертировать в строку
От: vayerx  
Дата: 14.11.11 09:34
Оценка:
Здравствуйте, licedey, Вы писали:

L>Здравствуйте, Аноним, Вы писали:


А>>возможно ли такую структуру конвертировать в строку


L>На плюсах, для саморазвития:

L>
L>#include <strstream>
L>#include <string>
L>using std::strstream;
L>usgin std:string;

L>struct a
L>{
L>char v1;
L>int  v2
L>char v3[4];
L>string toString() {
L>  strstream s;
L> return (s << (int)v1 - '0' << " " << v2 << " " << atoi(v3)).str();
L>}
L>};
L>

А>>v1 v2 и v3 могут быть нулями.

strstream — deprecated,
atoi(v3) — некорректно сериализует v3, если там встречаются ненулевые символы после нулевых.
stringstream::operator<< возвращает ссылку на std::ostream, у которого нет метода str.

возможно, сериализацю в строку лучше разделить на два метода: оператор записи в std::ostream и непосредственно метод записи в строку через этот оператор и stringstream. это позволит сериализовать непосредственно в произволный выходного поток, без вызова дополнительного метода и конструирования лишней строки.

не лишним будет взглянуть Boost.Serialization
Re[3]: возможно ли такую структуру конвертировать в строку
От: licedey  
Дата: 14.11.11 22:33
Оценка:
Здравствуйте, vayerx, Вы писали:

V>Здравствуйте, licedey, Вы писали:


L>>Здравствуйте, Аноним, Вы писали:


А>>>возможно ли такую структуру конвертировать в строку


L>>На плюсах, для саморазвития:

L>>
L>>#include <strstream>
L>>#include <string>
L>>using std::strstream;
L>>usgin std:string;

L>>struct a
L>>{
L>>char v1;
L>>int  v2
L>>char v3[4];
L>>string toString() {
L>>  strstream s;
L>> return (s << (int)v1 - '0' << " " << v2 << " " << atoi(v3)).str();
L>>}
L>>};
L>>

А>>>v1 v2 и v3 могут быть нулями.

V>strstream — deprecated,

Писал на коленке. Но общая суть, вывод в stringstream. Если автор будет копать — чему-то научится.

V>не лишним будет взглянуть Boost.Serialization
Re[3]: возможно ли такую структуру конвертировать в строку
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 15.11.11 09:23
Оценка:
Здравствуйте, vayerx, Вы писали:

V>Здравствуйте, licedey, Вы писали:


L>>Здравствуйте, Аноним, Вы писали:


V>strstream — deprecated,

а что вместо него предлагают использовать?
Sic luceat lux!
Re[4]: возможно ли такую структуру конвертировать в строку
От: Тот кто сидит в пруду Россия  
Дата: 15.11.11 09:33
Оценка: -1
Здравствуйте, Kernan, Вы писали:

V>>strstream — deprecated,

K>а что вместо него предлагают использовать?

Застрелиться предлагают, видимо, т.к. нету ничего аналогичного (пригодного для больших данных).
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[4]: возможно ли такую структуру конвертировать в строку
От: vayerx  
Дата: 15.11.11 10:58
Оценка: -1
Здравствуйте, Kernan, Вы писали:

V>>strstream — deprecated,

K>а что вместо него предлагают использовать?

std::stringstream из <sstream>
Re[5]: возможно ли такую структуру конвертировать в строку
От: Тот кто сидит в пруду Россия  
Дата: 15.11.11 12:02
Оценка:
Здравствуйте, vayerx, Вы писали:

V>>>strstream — deprecated,

K>>а что вместо него предлагают использовать?

V>std::stringstream из <sstream>


Из stringstream невозможно вытащить данные без копирования.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[7]: возможно ли такую структуру конвертировать в строку
От: sts  
Дата: 16.11.11 17:35
Оценка:
Здравствуйте, alsemm, Вы писали:

A>Здравствуйте, vayerx, Вы писали:


V>>с чем мсье Pavel Dvorkin не согласен?

A>наверное, с тем, что раз в строке форматирования нет ни одного "%s", то использование sprintf разумно.

Ну, тогда еще неплохо было бы указать и достаточный размер буфера, не говоря об ошибке в формате.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.