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.


Zobrazeno 11 zpráv z 11.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
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.