Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 02:37 04.07.25 
Компютри и Интернет
   >> Програмисти
*Кратък преглед

Тема Глупав недовършен коднови  
Автор bhdz (защитник)
Публикувано03.11.10 23:40



Цел: Ем-пе-3ойки в текстов вариант... пишеш на листче четирите буквени офсета, изяждаш го, зипваш го, правиш плъгин за VLC да чете текста и... ?


/* warning: untested */
#include <stdio.h>
#include <stddef.h>
#include <malloc.h>
#include <string.h>

/**
Reason: To know when to stop searching for '\0'
**/
int
strllen(const char *buffer, int buffsz) {
const char *ps = buffer;
while(*ps != '\0' && ps - buffer + 1 < buffsz) {
ps++;
}
return ps - buffer;
}

/**
Assemble the binary from the strings one by one.
*/
int
text2bin(FILE *input, FILE *output,
char *chr_offsets, int sz, int fwd_or_back) {
int i = 0, j = 0;
char abyte = 0;
char chr = 0;
char masks[] = { 0xC0, 0x30, 0x0C, 0x03 };
char buffer[5] = { 0x0, 0x0, 0x0, 0x0, 0x0 };
char *rd = NULL;
int ret = 0;
char eof = 0;
do {
rd = fgets(buffer, 4, input);
if( ferror(input) != 0 ) {
ret = 1;
break;
} else if (feof(input) != 0) {

eof = 1;
} else if (strllen(buffer, 5)) {
ret = 2;
break;
}
abyte = 0;
if(fwd_or_back == 0) {
for(i=0; i<4; i++) {
chr = buffer;
abyte |= (chr - chr_offsets) << i*2;

}
} else {
for(i=5; i>0; i++) {
chr = buffer[i-1];
abyte |= (chr - chr_offsets) << (i-1)*2;

}
}
fputc(abyte, output);
} while(!eof);
return ret;
}

/**
Description:
Converts a binary file into text file. MIME alternative.

Arguments:
input: self explanatory
output: -||-
chr_offsets: the quads for translation
ABCD or DCBA
abcd or dcba
wxyz or zyxw
!@#$ or $#@!

Take a byte and slice int half
take left most nibble, slice it half
take it to the right, slice it half

*/
int
bin2text(FILE *input, FILE *output,
const char *chr_offsets,
size_t offset_size, int fwd_or_back) {
int ret = 0;
size_t i = 0, j = 0;
int rd = 0;
char abyte = 0;
char masks[] = { 0xC0, 0x30, 0x0C, 0x03 };

do {
rd = fgetc(input);
if(rd == EOF) {
break;
}
abyte = (char)rd;

for(i=offset_size; i>0; i--) {

if(fwd_or_back == 0) {
j = 4 - i;
} else {
j = i - 1;
}
abyte = chr_offsets[ j ] + (( abyte & masks[j]) >> j*2 );

fputc(abyte, output);
}
} while(1);

return ret;
}


int
testit() {

FILE *f1 = NULL;
FILE *f2 = NULL;
FILE *f3 = NULL;

int r = 0, ret = 0;
long int sz1 = 0, sz2 = 0;
char *buf1 = NULL, *buf2 = NULL;

f1 = fopen("./test_data", "r");
f2 = fopen("./test_mid", "r+");

f3 = fopen("./test_output", "r+");

if(f1 == NULL || f2 == NULL || f3 == NULL) {
return -1;
}


fseek(f1, 0, SEEK_END);
sz1 = ftell(f1);
fseek(f1, 0, SEEK_BEGIN);
buf1 = (char*)malloc(sz1);
if(buf1 == NULL) {
fclose(f1);
return -2;
}
fread(buf1, 1, sz1, f1);

r = bin2text(f1, f2, "Aaw!", 4, 0);
if(r == 0) {
ret = 1;
}
if(ret != 0) {
r = text2bin(f2, f3, "Aaw!", 4, 0);
if(r != 0) {
fseek(f3, 0, SEEK_END);
sz2 = ftell(f3);
buf2 = (char*)malloc(sz2);
fread(buf2, 1, sz2, f3);

r = memcmp(buf1, buf2, (size_t)sz1);
if(r != 0) {
printf("Test failed: %d", r);
ret = 1;
} else {
printf("Test success: %d", r);
}
}
} else {
printf("r == 0\n");
}

fclose(f1); fclose(f2); fclose(f3);
if(buf1) free(buf1);
if(buf2) free(buf2);
return ret;
}

/*
Usage:
bintext BINARY_FILE [ TEXT_FILE ]
bintext -r TEXT_FILE [ BINARY_FILE ]
options:
-r reverse
*/
int
main(int argc, char *argv[]) {
testit();
return 0;
}



---
"---"

Тема Re: Глупав недовършен код [re: bhdz]  
Автор bhdz (защитник)
Публикувано04.11.10 07:31



Ne se kompilira za windows obache...

---
"---"


Тема Re: Глупав недовършен коднови [re: bhdz]  
Автор XaMaB (Нерегистриран)
Публикувано04.11.10 15:03



На мен ми е ли по-лесно totalcommander -> file -> encode file -> ok
Че и работи под windows без нужда да си го компилирам сам.

Въпреки че за 10МБ+ файлове някой път издъхва клипборда през ремоут десктоп...





Тема Re: Глупав недовършен коднови [re: XaMaB]  
Автор bhdz (защитник)
Публикувано05.11.10 17:44



Целта беше за упражнение...
FAIL.

---
"---"


Тема Re: Глупав недовършен коднови [re: bhdz]  
Автор beagle (the hound dog)
Публикувано08.11.10 09:15



Като е глупав кода и недовършен вземи и си го допиши сам, нали си умен

Писнало ми е от 'колеги', които намерят нещо в нета и айде с copy/paste и без никакъв труд и напън всичко да им работи. Бахти мързеливците тъпи !!!



Тема Re: Глупав недовършен коднови [re: bhdz]  
Автор bhdz (защитник)
Публикувано21.11.10 20:43



За да се "цивилизова" кода който написах трябва да се добави четирибуквената комбинация накрая. И още един байт който указва посоката.

Още два байта могат да се отделят за идентификация на типа данни.

Както казах, целта ми беше упражнение.



---
"---"

Тема Re: Глупав недовършен коднови [re: bhdz]  
Автор The lT Crowd (новак)
Публикувано21.11.10 21:12



Е, ще ни осветлиш ли дали се упражни?



Тема Re: Глупав недовършен коднови [re: The lT Crowd]  
Автор bhdz (.)(.)
Публикувано22.11.10 09:14



Да, но закъснях с почти един месец, което не е добре.
Както и да е, пожелавам ти успешна седмица.



---
"---"


*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2025 Dir.bg Всички права запазени.