Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2012, 00:11   #1
StayCool
Пользователь
 
Регистрация: 25.11.2011
Сообщений: 12
Смех Обнаружение ошибок! Примитив!

Ребятки, пожалуйста помогите понять почему работает не так, как задумано.
Задача: Есть набор нулей и единиц, которые нужно записать в wav файл. Один символ из text на один символ из wav файл через каждые 4096 символов.

План: создать поток, открыть файл in.txt(в in.txt я записал кусок wav файла в двоичном виде. Взял из hex редактора.), переписать в buffer. Каждый 4096-ой символ заменять символом кодового сообщения (из text). После изменения записать buffer в файл out.txt.

Код:
#include <stdio.h>
#include <stdlib.h>
#include "stdafx.h"
#include <iostream>
using namespace std;

int main () {
	char text[]="010110000111100001111101001011010110010101010100001011100000111010111010101000101111100101000100110101100111001000111010";
/* text это кодовое сообщение */
	FILE * pFile;
	long lSize;
	int l=0,i=0,c=0;
	char * buffer;
	size_t result;
	pFile = fopen ( "in.txt" , "r+b" );
		if (pFile==NULL) {fputs ("File error",stderr); exit (1);}

// получение размера файла:
	fseek (pFile , 0 , SEEK_END); //SEEK_END/SET - beginning/origin of file.
	lSize = ftell (pFile);
	rewind (pFile); //sets indicator to origin of pFile.

// выделение памяти что бы разместить весь файл:
	buffer = (char*) malloc (sizeof(char)*lSize);
	if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}

// копирование файла в buffer:
	result = fread (buffer,1,lSize,pFile);
	if (result != lSize) {fputs ("Reading error",stderr); exit (3);}
	/* Теперь весь файл загружен в buffer */

	int d=4096; /* какой бит изменять */
	int n=0;

//изменение каждого d-бита
	for (int k=d-1;k<(sizeof(text)*d);k+=d)
			{
			if (buffer[k]!=' ')   //в hex-редакторе присутствуют
                                                 //пробелы, я их не трогаю
	    {
			buffer[k]=text[n];
			n++;
		}
			}
	 fclose(pFile);
	 pFile = fopen ( "out.txt" , "wb" );
  fwrite (buffer , 8 , 5000 , pFile );           /* тут не уверен про 5000 */
  fclose(pFile);
	free (buffer);
	return 0;
}
Проблема: Если d=4096 то программа не выполняется. Работает при 256. Не могу понять почему( Не знаю как проверить правильно ли изменяются символы?
StayCool вне форума Ответить с цитированием
Старый 25.05.2012, 11:31   #2
StayCool
Пользователь
 
Регистрация: 25.11.2011
Сообщений: 12
По умолчанию

Кто-нибудь?
StayCool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Понимаю, что примитив, но тем неменее... Aleksandr_909 Помощь студентам 16 11.02.2012 16:42
обнаружение ошибок aik2029 Microsoft Office Excel 4 14.11.2011 11:43
Зацените будильник написан новичком (не примитив) Casper-SC Софт 13 07.06.2010 18:37
обнаружение ошибок makar575 Фриланс 3 18.12.2007 07:56