23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
|
|
1 | |
Запись в фаил11.04.2010, 14:15. Показов 1172. Ответов 18
Метки нет (Все метки)
Здравствуйте, возник вопрос,возможно он покажется немного странным , но всё же хД
Суть такая: нужно было придумать некий простенький алгоритм шифрования строк char, чтобы результат записывался в фаил. Собственно я его придумал, провёл кое-какие расчёты. 12 Символьная строка шифруеться в 144 ' бита '(ну т.е. бита всмысле 144 символа 0 или 1 ) Так вот.если эти 144 записывать в фаил , то получиться ,что размер строки увеличиться в 12 раз, потому-что эти 'биты' запишуться всё равно как символы - слишком большой коэффициент увеличения =( В то же время, если подсчитать 12 символов = 12*8 бит 144 бита = 144/8 символов = 18 символов. То биш по идее увеличение строки всего в 1.5 раза - это уже приемимый результат. Вот собственно вопрос. Можно ли записать фаил таким образом , чтобы 'биты' записывались не как символы(которые весят 8 бит) а сами как биты ? Ну если я всё правильно понимаю,если нет - поправте.
0
|
11.04.2010, 14:15 | |
Ответы с готовыми решениями:
18
Запись в фаил Запись в фаил бОльшего числа цифр запись в фаил Запись в фаил c# |
60 / 22 / 2
Регистрация: 13.03.2010
Сообщений: 65
|
|
11.04.2010, 15:43 | 2 |
Можно конечно, но блоками по байту. Записывай в файл байт, который формируй из восьми бит.
Добавлено через 45 секунд Помогут такие операторы, как сдвиг (>>), битовое "и" (&).
1
|
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
|
|
11.04.2010, 22:39 [ТС] | 3 |
Спасибо )
А по подробней можно ? какими функциями пользоваться (запись\чтение) ?
0
|
60 / 22 / 2
Регистрация: 13.03.2010
Сообщений: 65
|
|
11.04.2010, 23:59 | 4 |
Запись: fwrite;
Чтение: fread.
1
|
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
|
|||||||||||||||||||||
12.04.2010, 21:33 [ТС] | 5 | ||||||||||||||||||||
так, вроде бы разобрался.
Теперь возникли дальше вопросы. допустим у меня есть некая переменная
Как инт?(чтобы легко делать побитовое и\или) или как-то по- другому? ведь у меня получиться сделать потом
ЗЫ я этим действием хочу сделать что-то типа
0
|
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
|
|||||||||||
12.04.2010, 22:21 | 6 | ||||||||||
Допустим у нас есть 4 бита. Мы их хотим "упаковать" в одну переменную.
1
|
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
|
|||||||||||
12.04.2010, 23:57 [ТС] | 7 | ||||||||||
Спасибо большое.
А насчёт эквивалентности записей Это одно и тоже
судя из моих экспериментов - да) Добавлено через 1 час 18 минут блинн,либо я что-то не так делаю...но оно умножаеться на 2 а не сдвигаеться =*(
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
||||||
13.04.2010, 00:02 | 8 | |||||
Сдвиг влево на один бит эквивалентен умножению на 2.
BYTE это байт я не бит.
0
|
230 / 60 / 17
Регистрация: 11.03.2010
Сообщений: 294
|
|
13.04.2010, 00:07 | 9 |
есть так же такой способ:
WriteFile() юзай мсдн...
0
|
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
|
|
13.04.2010, 00:07 [ТС] | 10 |
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
13.04.2010, 00:09 | 11 |
А есть std::ofstream и FILE*, которые работают везде, а не только под Windows.
0
|
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
|
||||||
13.04.2010, 00:12 | 12 | |||||
0
|
60 / 22 / 2
Регистрация: 13.03.2010
Сообщений: 65
|
|||||||||||||||||||||
13.04.2010, 01:56 | 13 | ||||||||||||||||||||
А зачем для 144 бит 144 байта? Достаточно ведь 18 байт. Т.к. 8 бит на байт * 18 байт = 144 бит.
1
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
||||||||||||||||
13.04.2010, 02:06 | 14 | |||||||||||||||
kirjushyk, нумерация элементов массива начинается с нуля, поэтому шестой байт это a[5], а не a[6].
1
|
60 / 22 / 2
Регистрация: 13.03.2010
Сообщений: 65
|
|
13.04.2010, 02:48 | 15 |
Шестой байт считая с нуля (как я между прочим и указал) это как раз a[6]. Или как бы я обращался к нулевому байту (считая с нуля)? А со сдвигами я показал, чтобы понятнее было.
0
|
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
|
|
13.04.2010, 20:10 [ТС] | 16 |
да да , это я перегрелся просто чутка))) Так вот без сдвигов - то не особо. у меня то получается вот такая тема,что биты сначала в интах храняться , и при записи....думаю просто умножать на 10 ))) или можно как - то работать сразу через 16ричную(или двоичную) С.С. ? Добавлено через 2 часа 43 минуты Так , возник ещё один главный вопрос. Допустим мы всё зашифровали, записали пачками по байту.Вот.В итоге в фаиле у нас некие символы. А как быть с обратным процессом?(расшифровкой) Т.е. Как мне обратно разбить по битам содержимое ?????
0
|
60 / 22 / 2
Регистрация: 13.03.2010
Сообщений: 65
|
|
13.04.2010, 20:30 | 17 |
Я уже писал, как узнать значение какого-то бита какого-то байта. Последний пример в помощь!
1
|
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
|
|
13.04.2010, 20:33 [ТС] | 18 |
Ааааа да да, щас испытаем )
0
|
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
|
|||||||||||||||||||||
20.04.2010, 15:45 [ТС] | 19 | ||||||||||||||||||||
я вернулся )))
Вообщем, я понял как записать\считать биты. вот что сделал
Вобщем вот в чём проблема. функции отвечающие за Запись битов,Получение значения бита работают нормально , также работает нормально функция возвращающая весь байт. НО вот функция устанавливающая ВСЕЬ БАЙТ почему-то суёт 1 всезде =(((( Добавлено через 1 минуту Попробовал также более простой вариант функции установления байта
Добавлено через 12 минут Либо функция возвращающая байт неправильно работает =( Добавлено через 11 минут блиииин =(((( там функция сетбит тоже не работает...да что за... Добавлено через 6 минут так всё ясно.Это кривые первоисточники !!!! нууу!!! и отсутствие моей логики. а именно , чтобы сдвинуть на несколько разрядов число надо было писать не
0
|
20.04.2010, 15:45 | |
20.04.2010, 15:45 | |
Помогаю со студенческими работами здесь
19
Запись в фаил фаил типа запись.. Удалёная запись в фаил. Запись данных в конфигурационный фаил Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |