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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2012, 22:38   #1
Sergey S
Пользователь
 
Регистрация: 08.01.2012
Сообщений: 10
По умолчанию Как работает fwrite() в данном случае ?

Всем привет! Вдруг понял, что fwrite() в моей программе пишет не то, что я хочу. Текст программы:

Код:
#include <stdio.h>
#include <errno.h>

#define  GAMMA_LENGTH 5
// длина генерируемой гамма-последовательности, исчисляется в Байтах


int main(void)
{
    unsigned long int i,a;
    unsigned short int Px,Gx;
    unsigned int is_one,remain_bits;
    unsigned char buf;

    FILE *gamma;
    gamma = fopen("gamma.txt","w");
	if (gamma == NULL)
    {
        printf("Output file open error\n");
        return(1);
    }

    Gx=0xB6D3; /* сюда записывается полином */
    Px=0x0001; /* сюда записывается начальное значение */

    remain_bits = 8;
    buf = 0;
    for (i = 0; i < GAMMA_LENGTH;  )
    {

        is_one = Px &  0x8000;  // проверить старший бит рабочего регистра
        Px = Px << 1;           // сдвинуть в 17й виртуальный бит
        if (is_one)             // если единица в 17
        {
            Px = Px ^ Gx;       // xor
            buf = buf | 0x0001;    // произвести запись в младший бит буфера
        }
                
        remain_bits --;
        if (remain_bits == 0)
        {

            a = fwrite(&buf,sizeof(char),1,gamma);
            printf("%u %hX\n",a,buf);
            remain_bits = 8;
            i++;
        }
        buf = buf << 1;
        
    }

    fclose(gamma);
    return(0);
}
идет генерация гамма-последовательности, но не в ней суть. Обратите внимание на запись в файл. Я параллельно вывожу на экран. Но в файле появляется не то, там появляется (16-ричная запись):

00 01 С0 0D 0A F0

откуда 0D !?

кто-нибудь, помогите понять плз )
Sergey S вне форума Ответить с цитированием
Старый 30.05.2012, 00:09   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Как работает fwrite() в данном случае ?
В данном случае функция видимо работает в текстовом режиме и если встречает символ LF (0x0a) то заменяет его комбинацией CRLF 0x0d 0x0a.
Значит надо файл открывать так:
Код:
FILE *gamma = fopen("gamma.txt","wb");
EUGY вне форума Ответить с цитированием
Старый 30.05.2012, 07:22   #3
Sergey S
Пользователь
 
Регистрация: 08.01.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
В данном случае функция видимо работает в текстовом режиме и если встречает символ LF (0x0a) то заменяет его комбинацией CRLF 0x0d 0x0a.
Значит надо файл открывать так:
Код:
FILE *gamma = fopen("gamma.txt","wb");
понял, спасибо
Sergey S вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не работает count(&users) - В ДАННОМ КОДЕ Дмитрий_Попов PHP 1 09.02.2012 21:51
как авторизоваться в таком случае? grafgrial Общие вопросы Delphi 2 19.09.2011 21:38
Непонятно: зачем делать декларацию функции в данном случае? Oleg_SK Общие вопросы C/C++ 0 17.07.2010 09:36
Как выпоступаете в случае использования ProcessMessage? Mixasik Общие вопросы Delphi 17 13.08.2009 23:11
Delphi, рекурсия, как сделать все возможные N-ки чисел (сколько столбцов такая N-ка,в данном случае 3)? domik Помощь студентам 5 26.09.2007 16:43