Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод переменной Byte в файл 
V
    Опции темы
sprinterv
Дата 15.6.2009, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 29.8.2008

Репутация: нет
Всего: нет



Как вывести  переменную типа Byte  в файл?

Код

void testlog(int l, byte *p)
{
    // write to OUTLOG
    FILE *f = fopen(testout, "ab");

    if (fwrite(p, 1, l, f) != l)
        fatal("Can not write binary outlog");
    fclose(f);    
}


Так не выходит.

Это сообщение отредактировал(а) sprinterv - 15.6.2009, 02:35
PM MAIL   Вверх
andrew_121
Дата 15.6.2009, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



sprinterv, Пожалуйста, пользуйтесь тэгом code для исходных кодов.
Проверь, файл открывается?
Код

void testlog(int l, byte *p)
{
    // write to OUTLOG
    FILE *f = fopen(testout, "ab");
    if ( !f ) {
        fatal("Can not open outlog");
        return;
    }

    if (fwrite(p, 1, l, f) != l)
        fatal("Can not write binary outlog");
    fclose(f);    
}


Это сообщение отредактировал(а) andrew_121 - 15.6.2009, 02:38


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
sprinterv
Дата 15.6.2009, 02:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 29.8.2008

Репутация: нет
Всего: нет



Цитата(andrew_121 @ 15.6.2009,  02:09)
sprinterv, Пожалуйста. Пользуйтесь тэгом code для исходных кодов.
Проверь, файл открывается?
Код

void testlog(int l, byte *p)
{
    // write to OUTLOG
    FILE *f = fopen(testout, "ab");
    if ( !file ) {
       fatal("Can not open outlog");
    }

    if (fwrite(p, 1, l, f) != l)
        fatal("Can not write binary outlog");
    fclose(f);    
}

   
Код

         FILE *fpp;
    size_t countt;
    char const *strr = "hello \n";
    fpp = fopen("binlog","wb");
    countt = fwrite(strr,1, strlen(strr),fpp);
    fclose(fpp);


Этот код проверенно записывает строку в файл. 

Как аналогично записаить переменную типа Byte в файл?
PM MAIL   Вверх
andrew_121
Дата 15.6.2009, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(sprinterv @  15.6.2009,  02:37 Найти цитируемый пост)
Этот код проверенно записывает строку в файл.

Потому что, пример приведенный Вами, открывает файл для записи "wb"

Добавлено через 2 минуты и 15 секунд
А в функции testlog, файл открывается для дозаписи.
Вы проверили, файл открывается?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
andrew_121
Дата 15.6.2009, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Если всеже он не открывается/создается. То по глобальной переменной errno можно получить код ошибки. А при помощи функции char* strerror(int), можно получить сообщение об ошибке в виде строки. И при помощи функции perror(const char*), его можно вывести в консоль.

Ссылки:
http://www.cplusplus.com/reference/clibrary/cerrno/
http://www.cplusplus.com/reference/clibrar...tring/strerror/
http://www.cplusplus.com/reference/clibrary/cstdio/perror/


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
sprinterv
Дата 15.6.2009, 03:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 29.8.2008

Репутация: нет
Всего: нет



Цитата(andrew_121 @ 15.6.2009,  02:39)
Цитата(sprinterv @  15.6.2009,  02:37 Найти цитируемый пост)
Этот код проверенно записывает строку в файл.

Потому что, пример приведенный Вами, открывает файл для записи "wb"

Добавлено @ 02:41
А в функции testlog, файл открывается для дозаписи.
Вы проверили, файл открывается?

Первую часть кода я удалил. 
Но если отталкиваться от второго рабочего кода:

Код

   FILE *fpp;
    size_t countt;
    char const *strr = "hello \n";
    fpp = fopen("binlog","wb");
    countt = fwrite(strr,1, strlen(strr),fpp);
    fclose(fpp);


Как аналогично записать переменную типа Byte в файл? 



PM MAIL   Вверх
andrew_121
Дата 15.6.2009, 03:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



sprinterv, Именно так. У Вас все правильно!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
sprinterv
Дата 15.6.2009, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 29.8.2008

Репутация: нет
Всего: нет



Цитата(andrew_121 @ 15.6.2009,  03:13)
sprinterv, Именно так. У Вас все правильно!

andrew_121

Кусок кода что выше - работает правильно.  

Я не могу справиться с аналогичной задачей:

Как аналогично записать переменную типа Byte в файл? 

Добавлено через 3 минуты и 6 секунд
Все что мне нужно - это кусок кода, который будет записывать переменную типа byte в файл, 
аналогично приведенному примеру записи строковой переменной в файл 
PM MAIL   Вверх
andrew_121
Дата 15.6.2009, 03:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



sprinterv, Т.е. Если я Вас правильно понял, Вы хотите этот код вставить в функцию?
Если да, какие аргументы Вы планируете передавать функции?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
andrew_121
Дата 15.6.2009, 03:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Путем общения в ICQ, понял что требовалось.
Вот:
Код

struct submit_sm_pdu {
    byte data_coding;
};

void submit(struct submit_sm_pdu *w ) {
    w->data_coding = 245; /* octets */
    FILE *fpp = fopen("binlog","wb");
    size_t countt = fwrite(&w->data_coding, 1, sizeof(w->data_coding), fpp);
    fclose(fpp);



Это сообщение отредактировал(а) andrew_121 - 15.6.2009, 03:49


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
andrew_121
Дата 15.6.2009, 04:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Оказывается, не все так просто. Все таки нужно было записать в файл строку бинарного содержания. Вот что получилось.
Код

const char* byte_to_binstr(char v, char* buf) {
    int i;
    for ( i = 0; i < sizeof(v)*8; i++ ) {
        buf[i] = (v >> i & 1)+'0';
    }
    buf[i] = 0;
    return buf;
}

void submit(struct submit_sm_pdu *w ) {
    FILE *fpp = fopen("binlog","wb");
    char buf[sizeof(w->data_coding)*8+1];
    fprintf(fpp, "%s", byte_to_binstr(w->data_coding, buf));
    fclose(fpp);


п.с.
Модераторы, добавьте к ключевым словам(если они там есть) слова "binary, бинарный"

Добавлено @ 04:53
Дополню. Версия для С++.
Код

template<typename T> std::string to_binstr(const T& v) {
    std::string result;
    result.resize(sizeof(v)*8);
    
    for ( int i = 0; i < sizeof(v)*8; i++ ) {
        result[i] = (v >> i & 1)+'0';
    }

    return result;
}

int main(int argc, char** argv) {

    char                    ch = 123;
    unsigned char        uch = 234;
    short                    sh = 2345;
    unsigned short        ush = 23456;
    int                    in = 234567;
    unsigned int        uin = 2345678;
    __int64                i64 = 23456789;
    unsigned __int64    ui64 = 234567890;
    /**/
    std::cout<< "char            : " << to_binstr(ch).c_str() << std::endl;
    std::cout<< "unsigned char   : " << to_binstr(uch).c_str() << std::endl;
    std::cout<< "short           : " << to_binstr(sh).c_str() << std::endl;
    std::cout<< "unsigned short  : " << to_binstr(ush).c_str() << std::endl;
    std::cout<< "int             : " << to_binstr(in).c_str() << std::endl;
    std::cout<< "unsigned int    : " << to_binstr(uin).c_str() << std::endl;
    std::cout<< "__int64         : " << to_binstr(i64).c_str() << std::endl;
    std::cout<< "unsigned __int64: " << to_binstr(ui64).c_str() << std::endl;
    /**/
    return 0;
}



Это сообщение отредактировал(а) andrew_121 - 15.6.2009, 19:10


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
xvr
Дата 15.6.2009, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Завершающий 0 у строки забыл

PM MAIL   Вверх
andrew_121
Дата 15.6.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



xvr, Вы имеете ввиду С-версию?
Поправил.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
xvr
Дата 15.6.2009, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(andrew_121 @ 15.6.2009,  18:19)
xvr, Вы имеете ввиду С-версию?

Угу
Цитата

Поправил.
Не до конца, еще надо
Код

    char buf[sizeof(w->data_coding)*8+1];


PM MAIL   Вверх
andrew_121
Дата 15.6.2009, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



xvr, Упс smile  Спасибо!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0971 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.