Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
1

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

27.10.2013, 22:47. Показов 2210. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здорова господа!!!

Имеется строка типа string в которую считано изображение. Как можно узнать сколько будет эта же строка занимать в бинарном режиме???
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2013, 22:47
Ответы с готовыми решениями:

Чтение строки в бинарном режиме
Необходимо прочитать файл .txt в бинарном режиме и записать в строку. ifstream...

Запись в файл в бинарном режиме
Есть файл, 1.exe, как его открыть чтоб можно было записать в него свой hex код ?

Запись char в бинарном режиме
Пишу в файл две структуры. struct ApRegFileHead { char *rHead; unsigned int version;...

Чтение файлов в бинарном режиме
Имеется код: #include <stdlib.h> #include <stdio.h> int main(){ FILE *bRead; char...

13
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
27.10.2013, 22:55 2
sizeof ?
std::string::size() ?
1
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
27.10.2013, 22:58 3
Цитата Сообщение от ninja2 Посмотреть сообщение
Как можно узнать сколько будет эта же строка занимать в бинарном режиме?
C++
string s = "1234567890";
 
cout << sizeof(s) << endl;
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
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, но что бы в нее записать мне нужно это сделать через буфер, это строку нужно кинуть в поток, включить бинарный режим, либо записывать в файл, считывать в бинарном режиме, считать сколько она занимает размер в потоке, выделить буфер нужного размера, из потока записать в этот буфер и передать функцие, обрабатывать потом с помощью функций библиотеки.

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

Не по теме:

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

1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
27.10.2013, 23:31  [ТС] 6
Ладно щас попробую в обычном режиме символьном создать буфер мб и получиться, щас считаю строку попробую, да что пробовать я уверен не получиться ничего, нужно изображения записывать и считывать только в бинарном иначе все изображение портиться.

Добавлено через 1 минуту
Цитата Сообщение от gromo Посмотреть сообщение
я пасую перед таким потоком мысли
Не ну я сам не знаю как оно на самом деле, мб что и приврал, но думаю так должно быть.
0
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
27.10.2013, 23:31 7
Цитата Сообщение от ninja2 Посмотреть сообщение
Имеется строка типа string в которую считано изображение. Как можно узнать сколько будет эта же строка занимать в бинарном режиме???
С чего ты взял, что это строка какая-то? По мне - это тупо набор байт. Поэтому и выводит, и показывает, что длина 7 символов - потому что просто в этом бинарном потоке 7ой байт нулевой.
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
27.10.2013, 23:38  [ТС] 8
Цитата Сообщение от ct0r Посмотреть сообщение
С чего ты взял, что это строка какая-то? По мне - это тупо набор байт. Поэтому и выводит, и показывает, что длина 7 символов - потому что просто в этом бинарном потоке 7ой байт нулевой.
Да понятно не трудно догадаться там же память выделяется под 2k с чемто байт.

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

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

Добавлено через 2 минуты
Цитата Сообщение от ct0r Посмотреть сообщение
С чего ты взял, что это строка какая-то? По мне - это тупо набор байт. Поэтому и выводит, и показывает, что длина 7 символов - потому что просто в этом бинарном потоке 7ой байт нулевой.
Вообще то у меня изображение копируется с помощью curl, и чото мне кажется не в бинарную строку. Щас еще посмотрю, мб оно и так у меня буфер уже есть готовый не обычная строка.
0
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
27.10.2013, 23:43 9
Цитата Сообщение от ninja2 Посмотреть сообщение
Ой не байт, а скорее бит malloc вроде размер в битах принимает

Не по теме:

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


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

Не по теме:

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

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

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

Не по теме:

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

0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
28.10.2013, 00:20  [ТС] 13
Да нет все таки нужно без копирования обойтись, у меня все изображения считывает примерно если 300 статей парсишь, то 1Гб изображений получается 7-10к изображений, нафиг оно мне нада, а если я с этим промежуточным копированием делать буду, то получиться 7-10к изображений перекопирует во временную переменную и плюс нужные, это время возрастет сильно.
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
28.10.2013, 01:35  [ТС] 14
Ладно я щас реальный кусок программы покажу с разными вариантами, посмотрите что можно сделать, щас выделю кусок кода рабочий и покажу где нужно улучшить.

Добавлено через 1 час 4 минуты
О вроде заработало, но как работает не понятно, ну фиг с ним.
0
28.10.2013, 01:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2013, 01:35
Помогаю со студенческими работами здесь

Чтение из файла в бинарном режиме
Товарищи знатоки, подскажите.. Возникла такая проблема, а как считать из файла в переменную дробное...

Открытие файла в бинарном режиме
Здравствуйте! Есть задание (подробности не имею значения), нужно сделать в текстовом и бинарном...

Открытие файла в бинарном режиме
Помогите разобраться. Необходимо реализовать алгоритм шифрования AES128. Всё сделано, только...

Чтение в бинарном режиме из файла
Python 3.2 sourcedata=open(srcfile, 'rb').read() print sourcedata Чтение из файла в бинарном...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru