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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> unsigned char to char, как преобразовать тип 
V
    Опции темы
Belous
Дата 10.2.2017, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вопрос появился в связи со следующим.
Есть текстовый файл. Данные из которого я считываю и получаю строки как массивы char.
Но для того, чтобы пользователь не мог править файл по своему усмотрению, желательно его зашифровать хотя бы простеньким xor. 

Например мне нужно 
1. прочитать данные из файла
2. использовать функцию EncodingDdecoding()
3. перевести массив unsigned char в массив char, чтобы получить текст.


1-> считываю данные файла побайтно, (насколько я понимаю byte в С++ это и есть unsigned char)
Код

int i;
char str[100];
unsigned char ustr[100];
FILE *file;
if ((file = fopen(filename, "r+b")) != NULL)
{
    for (i=0; i<1; i++)
    {
        fread(ustr, sizeof(unsigned char), 100, file);
        if (feof(file)) break;
    }
    fclose(file);
}

2-> использовать функцию EncodingDdecoding()
Код

void EncodingDdecoding (unsigned char *input, unsigned char *output, int len) 
{
//...
}

3-> а вот здесь вопрос ?

Код

strcpy(str, (char*) ustr); // <-- ошибка






Это сообщение отредактировал(а) Belous - 11.2.2017, 00:00
PM MAIL   Вверх
Belous
Дата 10.2.2017, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



PS у меня в отличие от тех решений, которые нахожу в интернете не создается другой (зашифрованный или расшифрованный) файл. В рамках моей задачи этого во-первых не нужно. А во-вторых создать второй файл а затем удалить - это как-то не спортивно.
PM MAIL   Вверх
azesmcar
Дата 11.2.2017, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



если пишешь на C++, то лучше использовать его возможности, а не путаться в сишных fopen -ах.
вот пример. меняй по вкусу.
Код

#include <iostream>
#include <fstream>
#include <algorithm>
#include <string>
#include <iterator>

int main()
{
    std::string encoded;
    std::string decoded;

    std::ifstream fin("test.txt");
    fin >> std::noskipws;

    std::transform(
        std::istream_iterator<char>(fin),
        std::istream_iterator<char>(),
        std::back_inserter(encoded),
        std::bind(std::plus<char>(), std::placeholders::_1, 1));

    std::transform(
        encoded.begin(),
        encoded.end(), 
        std::back_inserter(decoded),
        std::bind(std::minus<char>(), std::placeholders::_1, 1));

    std::cout << encoded << std::endl;
    std::cout << decoded << std::endl;
}

PM   Вверх
Belous
Дата 11.2.2017, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



<удалено>

Это сообщение отредактировал(а) Belous - 11.2.2017, 10:46
PM MAIL   Вверх
azesmcar
Дата 11.2.2017, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Belous, signed тип использует один бит для хранения знака для отрицательного или положительного числа, а unsigned тип использует этот бит для хранения самого числа. В этом причина того, что unsigned тип может хранить вдвое больше, но в данном случае тебе нужен просто char. ASCII таблица в char помещается.
PM   Вверх
Belous
Дата 11.2.2017, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Решил сделать по вашему примеру.

Спасибо
PM MAIL   Вверх
volatile
Дата 11.2.2017, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Belous @  10.2.2017,  23:08 Найти цитируемый пост)
strcpy(str, (char*) ustr); // <-- ошибка

Здесь нет ошибки, походу у вас ошибка была где-то в другом месте

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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