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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать программу для работы с массивом http://www.cyberforum.ru/cpp-beginners/thread989971.html
Написать программу для работы с массивом Программа должна управляться с помощью меню из шести пунктов: 1.Текст задачи 2.Ввод элементов массива 3.Определение количества ненулевых элементов...
C++ fortran Работа с массивами: Вычислить произведение двух наибольших элементов http://www.cyberforum.ru/cpp-beginners/thread989957.html
Задачу по системному программированию о строках (вижуал студио) C++
Пусть дано строку, что состоит с нескольких слов и некоторых символов. Необходимо определить количество букв во втором слове, вывести номера позиций, где встречается данный символ, вывести третье...
C++ Определить вид треугольника
1. Ввести углы а, в, с треугольника (а + в + с = 180 º) и определить вид треугольника (остроугольный, прямоугольный, тупоугольный, равнобедренный, ривньосторонний или Δ-к - не существует). #include...
C++ замена exit(0) на return http://www.cyberforum.ru/cpp-beginners/thread989918.html
необходимо заменить exit(0) из данного куска кода на return в main, используя при этом true-дальнейшее действие программы (есть функция, которая выполняется при выполнении условия), false-при...
C++ Обработка строк Нужно обработать строку по условию Вычислить количество вхождений в строку символа, эквивалентиного заданной пользователем цифре. Удалить из строки последовательности, состоящие из двух и более... подробнее

Показать сообщение отдельно
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.10.2013, 23:28  [ТС]
Цитата Сообщение от 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru