Diskuze: Prevod Char textu do binarneho tvaru
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zkus alespoň napsat, jak by jsi to řešil.. Když napíšeš, že jsi se ani nepokusil, tak ti tu většina ani radit nebude.. Takhle to (vypadá), že po někom chceš hotové řešení.
Asi takto len neviem čo s tím dalej ze ako dam text char to intu?
(const char* text){
if(text == NULL)
return NULL;
int size = strlen(text);
int binaryNum[8];
char copy_text;
strcpy(copy_text,text);
To si tomu moc nedal. Tvé řešení nemá hlavu ani patu. Chybně je úplně vše (od deklarace proměnných, ukončení bloku, použití správného argumentu funkce, a mnoho dalších).
Řešením je vytvoření funkce převádějící znak do jeho binární podoby a provést traversing (Tuto funkci aplikovat postupně na všechny znaky v daném řetezci).
#include <stdio.h>
void ch_to_bin(unsigned char c);
int main(void) {
unsigned char str[] = "Hello world!";
unsigned char *pstr = str;
while (*pstr) ch_to_bin(*pstr++);
return 0;
}
void ch_to_bin(unsigned char c) {
int i;
for (i = 7; i >= 0; i--) putchar((c & (1 << i)) ? '1' : '0');
}
Proměnná c je formálním parametrem funkce ch_to_bin(), jejíž účelem je předat funkci znakový argument. Ten je získáván pomocí dereference ukazatele na znak, který obsahuje postupně adresy všech znaků ve vstupním řetězci.
Ok len aby sme sa pochopili.Program ,ktorý mám urobiť je takto je definovaná funkcia v ktorej má bežať daný kód na zmenu char do bin.Main je ukažkovy ,že ako sa vyplňa. ta funkcia.
unsigned char* bit_encrypt(const char* text){
}
int main(){
char* encrypted;
encrypted = bit_encrypt("Hello world!");
}
Pokud chceš s binární reprezentací řetězce dále pracovat, musíš ji někam uložit. Tedy alokuješ si prostor, aby se do něj vešla binární reprezentace celého řetězce. Poté binární reprezentaci každého znaku postupně ukládáš do tebou alokované paměti. Nakonec vrátíš z funkce ukazatel na začátek alokované paměti, což představuje začátek řetězce zapsaném v binární podobě. Vrácený ukazatel přiřadíš jinému ukazateli. Vypíšeš řetězec pomocí ukazatele a nakonec uvolníš alokovanou paměť.
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
unsigned char *str_to_bin(unsigned char *s);
int main(void) {
unsigned char str[] = "Hello World!";
unsigned char *p_binstr = NULL;
p_binstr = str_to_bin(str);
puts(p_binstr);
free(p_binstr);
return 0;
}
unsigned char *str_to_bin(unsigned char *s) {
unsigned char *strbuff = NULL;
unsigned char *p_str = s;
int i, pos = 0;
strbuff = (unsigned char *)malloc(CHAR_BIT * strlen(s) + 1);
if (!strbuff) {
fprintf(stderr, "Chyba alokace pameti.\n");
exit(1);
}
while (*p_str) {
for (i = 7; i >= 0; i--, pos++) {
*(strbuff + pos) = ((*p_str & (1 << i)) ? '1' : '0');
}
p_str++;
}
*(strbuff + pos) = '\0';
return strbuff;
}
Můžeš si zachovat (lehce poupravit) funkci pro získání binární reprezentace znaku a tuto funkci používat pro funkci provádějící převod celého řetězce do binární podoby. Přístup bys pak prováděl pomocí ukazatele na funkci použitého jako argument funkce. Z důvodu efektivity je funkce převodu znaku do jeho binární podoby přímo implementována do funkce pracující s řetězcem.
Velmi pekne dakujem za pomoc. Mam otazku co robi ta funkcia CHAR_BIT?
CHAR_BIT je makro, nikoli funkce. Je definováno v knihovně limits.h a vyjadřuje z kolika bitů se byte skládá. Ne všechny architektury pracují v systému 1 byte = 8 bits.
Program ovšem pracuje správně tam kde 1byte = 8 bits. Což je vidět z počtu iterací cyklu for.
Zobrazeno 11 zpráv z 11.