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

Размер строки в бинарном режиме! - C++

Восстановить пароль Регистрация
 
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.10.2013, 22:47     Размер строки в бинарном режиме! #1
Здорова господа!!!

Имеется строка типа string в которую считано изображение. Как можно узнать сколько будет эта же строка занимать в бинарном режиме???
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
27.10.2013, 22:55     Размер строки в бинарном режиме! #2
sizeof ?
std::string::size() ?
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
27.10.2013, 22:58     Размер строки в бинарном режиме! #3
Цитата Сообщение от ninja2 Посмотреть сообщение
Как можно узнать сколько будет эта же строка занимать в бинарном режиме?
C++
string s = "1234567890";
 
cout << sizeof(s) << endl;
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.10.2013, 23:28  [ТС]     Размер строки в бинарном режиме! #4
Цитата Сообщение от programina Посмотреть сообщение
string s = "1234567890"; cout << sizeof(s) << endl;
Это не тут, это просто размер объекта string s;
Нужно правильно если узнать размер данных которые имеются в строке так записывать:
C++
1
2
3
string s = "1234567890";
 
cout <<(sizeof(char)*s.size())<<endl;
Цитата Сообщение от gromo Посмотреть сообщение
sizeof ?
std::string::size() ?
Нет это ж просто размер показывает, мне нужно что бы был такой размер от если есть строка "34", символьный размер ее 2 байта, но в бинарном режиме все целые числа записываются в количестве байт которые занимает int на определенном компе. Ну я не знаю как оно там переводит, но строка "34" которая в char весит 2 байта, в бинарном режиме будет занимать 4 байта и наверно строка "3333333" которая 7 байт в char походу должна занимать те же 4 байта в бинарном режиме. Ну я не знаю как оно правильно переводит, это не важно, я могу щас делать по другому, мне в функцию нужно передать сам буфер и размер буфера и походу буфер сам должен быть в бинарном режиме я сам не сильно разбираюсь, но с кода видно какой буфер выделился громадный хотя в реале символов мало записано:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <fstream>
using std::ifstream;
using std::ofstream;
#include <stdlib.h>
#include <sstream>
using std::stringstream;
 
#include "gd.h"
 
 
 
 
#pragma comment(lib,"libgd.lib")
 
int main()
{
    stringstream ss;
 
    int lSize;
    char * buffer;
    size_t result;
 
    gdImagePtr im,dest_img;
    FILE* f=fopen("99px_ru_avatar_30260_smert_angel.gif","rb");
    
    if (f==NULL) {fputs ("File error",stderr); exit (1);}
 
    // obtain file size:
    fseek (f , 0 , SEEK_END);//хз что делает
    lSize = ftell (f);//возвращает размер файла
    rewind (f);//видимо устанавливает на начало курсор
    cout <<"lSize beg= "<<lSize<<endl;//26392 - что это за размер?
 
    // allocate memory to contain the whole file:
    buffer = (char*) malloc (sizeof(char)*lSize); //походу буфер весит 26392 бита char 1 байт
    if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}
 
    // copy the file into the buffer:
    result = fread (buffer,1,lSize,f);
    cout <<"buffer= "<<buffer<<endl;//тут от 7 символов выведет
    if (result != lSize) {fputs ("Reading error",stderr); exit (3);}
    cout <<strlen(buffer)<<endl;//7
    exit(1);
 
    im=gdImageCreateFromGifPtr(lSize,buffer);
    
    if(im!=0)
        cout <<"im->sx= "<<im->sx<<" im->sy= "<<im->sy<<endl;
    else
        cout <<"im==0"<<endl;
return 0;
Добавлено через 1 минуту
Тут видно что lSize - это размер файла в бинарном режиме и видно что он громадный.

Добавлено через 6 минут
У меня есть строка в которой я считал с интернета изображение, от мне нужно ее обработать с помощью библиотеки gdlib, но что бы в нее записать мне нужно это сделать через буфер, это строку нужно кинуть в поток, включить бинарный режим, либо записывать в файл, считывать в бинарном режиме, считать сколько она занимает размер в потоке, выделить буфер нужного размера, из потока записать в этот буфер и передать функцие, обрабатывать потом с помощью функций библиотеки.

Тот код что у меня выше работает, но у меня исходно изображения в виде строки это мне придется каждый раз что бы создавать буфер записывать эту строку в файл, потом считывать ее в бинарном режиме, а мне хочеться как то попроще сразу эту строку как то в бинарный режим перевести.
gromo
27.10.2013, 23:28
  #5

Не по теме:

Цитата Сообщение от ninja2 Посмотреть сообщение
Нет это ж просто размер показывает, мне нужно что бы был такой размер от если есть строка "34", символьный размер ее 2 байта, но в бинарном режиме все целые числа записываются в количестве байт которые занимает int на определенном компе. Ну я не знаю как оно там переводит, но строка "34" которая в char весит 2 байта, в бинарном режиме будет занимать 4 байта и наверно строка "3333333" которая 7 байт в char походу должна занимать те же 4 байта в бинарном режиме. Ну я не знаю как оно правильно переводит, это не важно, я могу щас делать по другому, мне в функцию нужно передать сам буфер и размер буфера и походу буфер сам должен быть в бинарном режиме я сам не сильно разбираюсь, но с кода видно какой буфер выделился громадный хотя в реале символов мало записано:
я пасую перед таким потоком мысли

ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.10.2013, 23:31  [ТС]     Размер строки в бинарном режиме! #6
Ладно щас попробую в обычном режиме символьном создать буфер мб и получиться, щас считаю строку попробую, да что пробовать я уверен не получиться ничего, нужно изображения записывать и считывать только в бинарном иначе все изображение портиться.

Добавлено через 1 минуту
Цитата Сообщение от gromo Посмотреть сообщение
я пасую перед таким потоком мысли
Не ну я сам не знаю как оно на самом деле, мб что и приврал, но думаю так должно быть.
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
27.10.2013, 23:31     Размер строки в бинарном режиме! #7
Цитата Сообщение от ninja2 Посмотреть сообщение
Имеется строка типа string в которую считано изображение. Как можно узнать сколько будет эта же строка занимать в бинарном режиме???
С чего ты взял, что это строка какая-то? По мне - это тупо набор байт. Поэтому и выводит, и показывает, что длина 7 символов - потому что просто в этом бинарном потоке 7ой байт нулевой.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.10.2013, 23:38  [ТС]     Размер строки в бинарном режиме! #8
Цитата Сообщение от ct0r Посмотреть сообщение
С чего ты взял, что это строка какая-то? По мне - это тупо набор байт. Поэтому и выводит, и показывает, что длина 7 символов - потому что просто в этом бинарном потоке 7ой байт нулевой.
Да понятно не трудно догадаться там же память выделяется под 2k с чемто байт.

Добавлено через 1 минуту
Ой не байт, а скорее бит malloc вроде размер в битах принимает, но это не важно.

Добавлено через 53 секунды
Или хз.

Добавлено через 2 минуты
Цитата Сообщение от ct0r Посмотреть сообщение
С чего ты взял, что это строка какая-то? По мне - это тупо набор байт. Поэтому и выводит, и показывает, что длина 7 символов - потому что просто в этом бинарном потоке 7ой байт нулевой.
Вообще то у меня изображение копируется с помощью curl, и чото мне кажется не в бинарную строку. Щас еще посмотрю, мб оно и так у меня буфер уже есть готовый не обычная строка.
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
27.10.2013, 23:43     Размер строки в бинарном режиме! #9
Цитата Сообщение от ninja2 Посмотреть сообщение
Ой не байт, а скорее бит malloc вроде размер в битах принимает

Не по теме:

За такое на собеседованиях бить будут. Может даже ногами.


Цитата Сообщение от ninja2 Посмотреть сообщение
Вообще то у меня изображение копируется с помощью curl, и чото мне кажется не в бинарную строку
Думаешь, что в обычную строку? Типа "это яблоко"?
programina
27.10.2013, 23:43
  #10

Не по теме:

Цитата Сообщение от ninja2 Посмотреть сообщение
Имеется строка типа string в которую считано изображение
ninja2, знаете что! Нормальные программисты хранят такие данные как картинки и т.п. в последовательностях char'ов или в специальных структурах, а не в типах предназначенных для строк.

ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
28.10.2013, 00:03  [ТС]     Размер строки в бинарном режиме! #11
Цитата Сообщение от ct0r Посмотреть сообщение
Думаешь, что в обычную строку? Типа "это яблоко"?
Текст же считывает в обычную, я так же само как и html страницы читаю с теми же опциями и изображение, щас вроде там можно установить бинарный режим, да походу изображение считывается в обычном режиме, потому что мне что бы оно отображалось приходиться записывать в бинарном режиме в файл, я ж думаю если б строка была б бинарной, то она б в обычном режиме записалась как в бинарном и изображение отображалось, а так оно не отображается, да я честно сам незнаю что куда, а так если прикинуть, оно б в обычном когда записывало бинарную строку, то 0 бы встретило и все кусок только б записало, остальное откинуло, да и вообще ничего не понятно.

Добавлено через 11 минут
Ладно не буду я шарить время тратить, просто буду записывать во временный файл какой нить считывать в нужном режиме обработать а потом уже думать сохранять его или нет. Время не охота терять на эти мелочи, главно что бы работало хоть и с лишними операциями, я так думал что избавлюсь от копирования считал проверил записал и программа будет быстрее работать, а оно оказалось еще замедлиться в половину .
coloc
28.10.2013, 00:20
  #12

Не по теме:

programina, Не спорьте с гуру С++. Он лучше вас знает, что где хранить

ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
28.10.2013, 00:20  [ТС]     Размер строки в бинарном режиме! #13
Да нет все таки нужно без копирования обойтись, у меня все изображения считывает примерно если 300 статей парсишь, то 1Гб изображений получается 7-10к изображений, нафиг оно мне нада, а если я с этим промежуточным копированием делать буду, то получиться 7-10к изображений перекопирует во временную переменную и плюс нужные, это время возрастет сильно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2013, 01:35     Размер строки в бинарном режиме!
Еще ссылки по теме:

Работа файла в бинарном режиме записи C++
C++ Прочитать файл в бинарном режиме с записью результата в string
Как прочитать файл в бинарном режиме по 32 байта C++

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

Или воспользуйтесь поиском по форуму:
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
28.10.2013, 01:35  [ТС]     Размер строки в бинарном режиме! #14
Ладно я щас реальный кусок программы покажу с разными вариантами, посмотрите что можно сделать, щас выделю кусок кода рабочий и покажу где нужно улучшить.

Добавлено через 1 час 4 минуты
О вроде заработало, но как работает не понятно, ну фиг с ним.
Yandex
Объявления
28.10.2013, 01:35     Размер строки в бинарном режиме!
Ответ Создать тему
Опции темы

Текущее время: 06:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru